public CTFFloatType(List <CTFAssignmentExpression> cae) { foreach (CTFAssignmentExpression ae in cae) { //CTFUnaryExpression cue = ae.dst; // It must be identifier string name = ae.GetName(); CTFUnaryExpression src = ae.Src; switch (name) { case "exp_dig": exp_dig = src.Calculate(); break; case "mant_dig": mant_dig = src.Calculate(); break; case "align": talign = src.Calculate(); break; default: throw new CTFException(); } } }
internal static CTFEnumElem Parse(TokParser tp) { string name = tp.GetIden(); tp.MustBe(Token.EnumId.ASSIGNMENT); CTFUnaryExpression first = CTFUnaryExpression.Parse(tp); CTFEnumElem ce = new CTFEnumElem(name, first.Calculate()); if (tp.Match(Token.EnumId.ELIPSES)) { ce.Second = CTFUnaryExpression.Parse(tp).Calculate(); } return(ce); }
internal static CTFTypeSpecifier Parse(CTFScope scope, TokParser tp) { string name = null; List <CTFStructOrVariantDeclaration> list = null; if (!tp.Match(Token.EnumId.STRUCT)) { return(null); } if (tp.Token.Id == Token.EnumId.IDEN) { name = tp.Token.Buffer; tp.Next(); } if (tp.Match(Token.EnumId.LCURL)) { list = CTFStructOrVariantDeclaration.ParseList(scope, tp); tp.MustBe(Token.EnumId.RCURL); } int align = 0; if (tp.Match(Token.EnumId.ALIGN)) { tp.MustBe(Token.EnumId.LPAREN); CTFUnaryExpression cue = CTFUnaryExpression.Parse(tp); tp.MustBe(Token.EnumId.RPAREN); align = cue.Calculate(); } CTFType ct = CTFType.GetStructType(scope, name, list, align); return(new CTFStructSpecifier(ct)); }
public CTFIntType(List <CTFAssignmentExpression> cae) { foreach (CTFAssignmentExpression ae in cae) { string name = ae.GetName(); CTFUnaryExpression src = ae.Src; switch (name) { case "size": size = src.Calculate(); break; case "align": talign = src.Calculate(); break; case "base": ibase = src.Calculate(); break; case "encoding": string value = src.GetValue().GetString(); switch (value) { case "none": encoding = 0; break; case "UTF8": encoding = 1; break; } break; case "signed": string v = src.GetValue().GetString(); switch (v) { case "false": signed = false; break; case "0": signed = false; break; case "1": signed = true; break; case "true": signed = true; break; default: throw new CTFException(); } break; case "map": // TODO break; default: throw new CTFException(); } } }