OLD | NEW |
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 | 5 |
6 #import('file_system.dart'); | 6 #import('file_system.dart'); |
7 #import('lang.dart'); | 7 #import('lang.dart'); |
8 | 8 |
9 interface JsEvaluator { | 9 interface JsEvaluator { |
10 var eval(String source); | 10 var eval(String source); |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
57 _lib.resolve(); | 57 _lib.resolve(); |
58 } | 58 } |
59 | 59 |
60 void _ensureVariableDefined(Identifier name, [List<Token> modifiers = [], | 60 void _ensureVariableDefined(Identifier name, [List<Token> modifiers = [], |
61 TypeReference type = null]) { | 61 TypeReference type = null]) { |
62 var member = _lib.topType.getMember(name.name); | 62 var member = _lib.topType.getMember(name.name); |
63 if (member is FieldMember || member is PropertyMember) return; | 63 if (member is FieldMember || member is PropertyMember) return; |
64 _removeMember(name.name); | 64 _removeMember(name.name); |
65 _lib.topType.addField( | 65 _lib.topType.addField( |
66 new VariableDefinition(modifiers, type, [name], [null], name.span)); | 66 new VariableDefinition(modifiers, type, [name], [null], name.span)); |
67 _lib.topType.getMember(name.name).resolve(_lib.topType); | 67 _lib.topType.getMember(name.name).resolve(); |
68 } | 68 } |
69 | 69 |
70 var eval(String dart) { | 70 var eval(String dart) { |
71 var source = new SourceFile("_ifrog_", dart); | 71 var source = new SourceFile("_ifrog_", dart); |
72 world.gen.writer = new CodeWriter(); | 72 world.gen.writer = new CodeWriter(); |
73 | 73 |
74 var code; | 74 var code; |
75 var parsed = new Parser(source, throwOnIncomplete: true, | 75 var parsed = new Parser(source, throwOnIncomplete: true, |
76 optionalSemicolons: true).evalUnit(); | 76 optionalSemicolons: true).evalUnit(); |
77 var method = new MethodMember("_ifrog_dummy", _lib.topType, null); | 77 var method = new MethodMember("_ifrog_dummy", _lib.topType, null); |
(...skipping 18 matching lines...) Expand all Loading... |
96 new VarExpression(name, name.span), value, parsed.span); | 96 new VarExpression(name, name.span), value, parsed.span); |
97 new ExpressionStatement(expr, parsed.span).visit(methGen); | 97 new ExpressionStatement(expr, parsed.span).visit(methGen); |
98 }); | 98 }); |
99 code = methGen.writer.text; | 99 code = methGen.writer.text; |
100 | 100 |
101 } else if (parsed is FunctionDefinition) { | 101 } else if (parsed is FunctionDefinition) { |
102 var methodName = parsed.name.name; | 102 var methodName = parsed.name.name; |
103 _removeMember(methodName); | 103 _removeMember(methodName); |
104 _lib.topType.addMethod(methodName, parsed); | 104 _lib.topType.addMethod(methodName, parsed); |
105 MethodMember definedMethod = _lib.topType.getMember(methodName); | 105 MethodMember definedMethod = _lib.topType.getMember(methodName); |
106 definedMethod.resolve(_lib.topType); | 106 definedMethod.resolve(); |
107 var definedMethGen = new MethodGenerator(definedMethod, null); | 107 var definedMethGen = new MethodGenerator(definedMethod, null); |
108 definedMethGen.run(); | 108 definedMethGen.run(); |
109 definedMethGen.writeDefinition(world.gen.writer, null); | 109 definedMethGen.writeDefinition(world.gen.writer, null); |
110 code = world.gen.writer.text; | 110 code = world.gen.writer.text; |
111 } else if (parsed is TypeDefinition) { | 111 } else if (parsed is TypeDefinition) { |
112 _removeMember(parsed.name.name); | 112 _removeMember(parsed.name.name); |
113 var type = _lib.addType(parsed.name.name, parsed, parsed.isClass); | 113 var type = _lib.addType(parsed.name.name, parsed, parsed.isClass); |
114 type.resolve(); | 114 type.resolve(); |
115 world.gen.writeType(type); | 115 world.gen.writeType(type); |
116 code = world.gen.writer.text; | 116 code = world.gen.writer.text; |
117 } else { | 117 } else { |
118 parsed.visit(methGen); | 118 parsed.visit(methGen); |
119 code = methGen.writer.text; | 119 code = methGen.writer.text; |
120 } | 120 } |
121 | 121 |
122 return this._jsEvaluator.eval(code); | 122 return this._jsEvaluator.eval(code); |
123 } | 123 } |
124 } | 124 } |
OLD | NEW |