public void InitHash() { ArrayList param; LibFunc lfunc; MethodInfo minfo; tokens = new Hashtable(); param = new ArrayList(); minfo = typeof(Console).GetMethod("WriteLine", new Type[] { typeof(Int32) }); param.Add(Tok.TOK_FIXED); lfunc = new LibFunc("PRINT_I", "[mscorlib]System.Console::WriteLine(int32)", param, Tok.TOK_VOID, minfo ); add_tok(lfunc, "PRINT_I"); }
public void parse_and_compile() { prolog(); tree = new VarList(); IDictionaryEnumerator libEnum = lib.get_enum(); while (libEnum.MoveNext()) { Var procvar = new Var(); LibFunc lfunc = (LibFunc)libEnum.Value; procvar.setName(lfunc.nameShort); procvar.setType(Var.VAR_BLOCK); procvar.setTypeId(Tok.TOK_VOID); procvar.nodes = new VarList(); for (int i = 0; i < lfunc.typeParams.Count; i++) { Var param = new Var(); param.setName("PAR_" + i); param.setType(Var.VAR_PARAM); param.setTypeId((int)lfunc.typeParams[i]); procvar.nodes.add(param); } tree.add(procvar); } io.ReadChar(); tok.scan(); declarations(tree); while (tok.NotEOF()) { stmt(tree, null, null); } io.Message("compiled successfuly"); io.TreeDraw(tree); epilog(); }
public void Call(IAsm a) { Var func = a.getVar(); Object o = func.getMethodBuilder(); LibFunc lfunc = lib.lookup_func(a.getVar().getName()); if (lfunc != null) { il.Emit(OpCodes.Call, lfunc.methodInfo); } else { if (o == null) { io.ICE("no previous extern for (" + func.getName() + ")"); } MethodBuilder mb = (MethodBuilder)o; il.Emit(OpCodes.Call, mb); } }
public static void add_tok(LibFunc i, string s) { tokens.Add(s, i); }