public Expression Parse(CsExpression pStatement, FactoryExpressionCreator pCreator) { CsLambdaExpression ex = (CsLambdaExpression)pStatement; LambdaMethodExpression lambda = new LambdaMethodExpression((CsLambdaExpression)pStatement, pCreator); CodeBuilder b = new CodeBuilder(); b.AppendFormat("function ({0}):{1} {{", As3Helpers.GetParameters(lambda.Arguments), (lambda.ReturnType == null) ? "void" : As3Helpers.Convert(lambda.ReturnType) ); b.Indent(); b.Indent(); b.Indent(); b.AppendLine(); if (!(lambda.CodeBlock is CsBlock)) { b.Append("return "); } BlockParser.ParseNode(lambda.CodeBlock, b, pCreator); b.AppendLine("}"); b.AppendLine(); b.Unindent(); b.Unindent(); b.Unindent(); return(new Expression(b.ToString(), ex.entity_typeref)); }
public Expression Parse(CsExpression pStatement, FactoryExpressionCreator pCreator) { CsBinaryExpression li = (CsBinaryExpression)pStatement; Expression left = pCreator.Parse(li.lhs); Expression right = pCreator.Parse(li.rhs); return(new Expression(left.Value + " " + As3Helpers.ConvertTokens(Helpers.GetTokenType(li.oper)) + " " + right.Value, pStatement.entity_typeref)); }
public Expression Parse(CsExpression pStatement, FactoryExpressionCreator pCreator) { CsOperatorUnaryExpression ex = (CsOperatorUnaryExpression)pStatement; return(new Expression( As3Helpers.ConvertTokens(Helpers.GetTokenType(ex.oper)) + pCreator.Parse(ex.unary_expression).Value, pStatement.entity_typeref )); }
public Expression Parse(CsExpression pStatement, FactoryExpressionCreator pCreator) { CsAsIsExpression ex = (CsAsIsExpression)pStatement; return(new Expression( pCreator.Parse(ex.expression).Value + " " + As3Helpers.ConvertTokens(Helpers.GetTokenType(ex.oper)) + " " + As3Helpers.Convert(Helpers.GetType(ex.type)), ex.entity_typeref )); }
public Expression Parse(CsExpression pStatement, FactoryExpressionCreator pCreator) { //object-creation-expression: //"new" type "(" ( argument_list )? ")" object-or-collection-initializer? //"new" type object-or-collection-initializer //delegate-creation-expression: //"new" delegate-type "(" expression ")" CsNewObjectExpression node = (CsNewObjectExpression)pStatement; StringBuilder sb = new StringBuilder(); string name = As3Helpers.Convert(Helpers.GetType(node.type)); bool isVector = name.StartsWith("Vector.<", StringComparison.Ordinal) && node.initializer != null; bool isArray = name.Equals("Array", StringComparison.Ordinal) && node.initializer != null; if (!isArray) { sb.Append("(new "); } if (isVector || isArray) { if (isVector) { int lb = name.IndexOf("<") + 1; sb.AppendFormat("<{0}>", name.Substring(lb, name.IndexOf(">") - lb)); } sb.Append("["); CsCollectionInitializer initializer = (CsCollectionInitializer)node.initializer; if (initializer.element_initializer_list != null) { List <string> args = new List <string>(); foreach (var csNode in initializer.element_initializer_list) { args.Add(pCreator.Parse(csNode).Value); } sb.Append(String.Join(", ", args.ToArray())); } } else { sb.AppendFormat("{0}(", name); if (node.argument_list != null) { List <string> args = new List <string>(); foreach (CsArgument argument in node.argument_list.list) { args.Add(pCreator.Parse(argument.expression).Value); } sb.Append(String.Join(", ", args.ToArray())); } } sb.Append(isVector || isArray ? "]" : ")"); if (!isArray) { sb.Append(")"); } return(new Expression( sb.ToString(), pStatement.entity_typeref )); }
public Expression Parse(CsExpression pStatement, FactoryExpressionCreator pCreator) { CsAssignmentExpression ex = (CsAssignmentExpression)pStatement; Expression left = pCreator.Parse(ex.lhs); Expression right = pCreator.Parse(ex.rhs); if (((ex.lhs is CsElementAccess) || (ex.lhs is CsPrimaryExpressionMemberAccess)) && left.InternalType) { switch (ex.oper) { case CsTokenType.tkASSIGN: return(new Expression(string.Format(left.Value, right.Value), pStatement.entity_typeref)); case CsTokenType.tkPLUS_EQ: case CsTokenType.tkMINUS_EQ: case CsTokenType.tkDIV_EQ: case CsTokenType.tkMUL_EQ: string getter = ElementAccessHelper.parseElementAccess(ex.lhs, true, false, pCreator).Value; return(new Expression(string.Format(left.Value, getter + As3Helpers.ConvertTokens(Helpers.GetTokenType(convertToken(ex.oper))) + right.Value), pStatement.entity_typeref)); } } if ((ex.lhs is CsSimpleName) && left.InternalType) { switch (ex.oper) { case CsTokenType.tkASSIGN: return(new Expression(string.Format(left.Value, right.Value), pStatement.entity_typeref)); case CsTokenType.tkPLUS_EQ: case CsTokenType.tkMINUS_EQ: case CsTokenType.tkDIV_EQ: case CsTokenType.tkMUL_EQ: string getter = SimpleNameHelper.ParseSimpleName(ex.lhs, true, false).Value; return(new Expression(string.Format(left.Value, getter + As3Helpers.ConvertTokens(Helpers.GetTokenType(convertToken(ex.oper))) + right.Value), pStatement.entity_typeref)); } } if (ex.lhs is CsPrimaryExpressionMemberAccess) { if (ex.lhs.ec == expression_classification.ec_event_access) { CsEntityEvent ev = (CsEntityEvent)ex.lhs.entity; TheClass theClass = TheClassFactory.Get(ev.parent, pCreator); string eventName; //flash event on flash.xxxx if (theClass == null) { eventName = Helpers.GetEventFromAttr(ev.attributes); return(new Expression( left.Value + (ex.oper == CsTokenType.tkPLUS_EQ ? ("addEventListener(" + eventName + ", " + right.Value + ", false, 0, true)") : ("removeEventListener(" + eventName + ", " + right.Value + ")")) , pStatement.entity_typeref )); } TheEvent theEvent = theClass.GetEvent(ev.name); if (theEvent != null && string.IsNullOrEmpty(theEvent.EventName)) //custom event on the same class { return(new Expression( //event name == left => left IS the event name. Do not add twice left.Value + (ev.name.Equals(left.Value, StringComparison.Ordinal) ? string.Empty : ev.name) + (ex.oper == CsTokenType.tkPLUS_EQ ? ".add" : ".remove") + "(" + right.Value + ")" , pStatement.entity_typeref )); } eventName = theEvent == null?Helpers.GetEventFromAttr(ev.attributes) : theEvent.EventName; //flash event on the same class. return(new Expression( //event name == left => left IS the event name. Do not add twice (ev.name.Equals(left.Value, StringComparison.Ordinal) ? string.Empty : left.Value) + (ex.oper == CsTokenType.tkPLUS_EQ ? ("addEventListener(" + eventName + ", " + right.Value + ", false, 0, true)") : ("removeEventListener(" + eventName + ", " + right.Value + ")")) , pStatement.entity_typeref)); } //else { // left = FactoryExpressionCreator.Parse(ex.lhs); // CsPrimaryExpressionMemberAccess primaryExpressionMemberAccess = (CsPrimaryExpressionMemberAccess)ex.lhs; // TheClass theClass = TheClassFactory.Get((CsEntity)primaryExpressionMemberAccess.entity); // //TheProperty theProp = theClass.GetProperty(); //} } return(new Expression(string.Format("{0} {2} {1}", left.Value, right.Value, As3Helpers.ConvertTokens(Helpers.GetTokenType(ex.oper))), pStatement.entity_typeref)); }