113 return false;
114 }
115 }
116
117 @Override
118 public Boolean visitFunction(FunctionTree funcTree, JType jt) {
119 if (super.visitFunction(funcTree, jt)) {
120 header_jsb.emitStaticForwarder(funcTree, (JType.Function)jt, STATICS_LIBRARY_FIELD_NAME);
121 return true;
122 } else {
123 return false;
124 }
125 }
126
127 @Override
128 public Boolean visitMacro(MacroTree macroTree, JType jt) {
129 if (super.visitMacro(macroTree, jt)) {
130 String name = macroTree.name();
131 MacroParser.Macro macro = macroTree.macro().get();
132 log.print(Level.FINE, () -> "Adding macro " + name);
133 addConstant(header_jsb, name, macro.type(), macro.value());
134 return true;
135 } else {
136 return false;
137 }
138 }
139
140 private void addConstant(JavaSourceBuilderExt jsb, String name, JType type, Object value) {
141 Object constantValue = makeConstantValue(type, value);
142 jsb.addField(name, type, constantValue, STATICS_LIBRARY_FIELD_NAME);
143 }
144
145 private Object makeConstantValue(JType type, Object value) {
146 switch (type.getDescriptor()) {
147 case "Z":
148 return ((long)value) != 0;
149 case "C":
150 return (char)(long)value;
151 case "B":
152 return (byte)(long)value;
153 case "S":
|
113 return false;
114 }
115 }
116
117 @Override
118 public Boolean visitFunction(FunctionTree funcTree, JType jt) {
119 if (super.visitFunction(funcTree, jt)) {
120 header_jsb.emitStaticForwarder(funcTree, (JType.Function)jt, STATICS_LIBRARY_FIELD_NAME);
121 return true;
122 } else {
123 return false;
124 }
125 }
126
127 @Override
128 public Boolean visitMacro(MacroTree macroTree, JType jt) {
129 if (super.visitMacro(macroTree, jt)) {
130 String name = macroTree.name();
131 MacroParser.Macro macro = macroTree.macro().get();
132 log.print(Level.FINE, () -> "Adding macro " + name);
133 addConstant(header_jsb, Utils.toMacroName(name), macro.type(), macro.value());
134 return true;
135 } else {
136 return false;
137 }
138 }
139
140 private void addConstant(JavaSourceBuilderExt jsb, String name, JType type, Object value) {
141 Object constantValue = makeConstantValue(type, value);
142 jsb.addField(name, type, constantValue, STATICS_LIBRARY_FIELD_NAME);
143 }
144
145 private Object makeConstantValue(JType type, Object value) {
146 switch (type.getDescriptor()) {
147 case "Z":
148 return ((long)value) != 0;
149 case "C":
150 return (char)(long)value;
151 case "B":
152 return (byte)(long)value;
153 case "S":
|