protected void CompleteInternal(CompletionContext context, string key) { string insertString; if (this.outputVisitor != null) { PrimitiveExpression pre = new PrimitiveExpression(key, key); pre.AcceptVisitor(this.outputVisitor, null); insertString = this.outputVisitor.Text; } else { insertString = key; } context.Editor.Document.Replace(context.StartOffset, context.Length, insertString); context.EndOffset = context.StartOffset + insertString.Length; }
/// <summary> /// Insert the element represented by the completion data into the text /// editor. /// </summary> /// <param name="textArea">TextArea to insert the completion data in.</param> /// <param name="ch">Character that should be inserted after the completion data. /// \0 when no character should be inserted.</param> /// <returns>Returns true when the insert action has processed the character /// <paramref name="ch"/>; false when the character was not processed.</returns> public override bool InsertAction(TextArea textArea, char ch) { string insertString; if (this.outputVisitor != null) { PrimitiveExpression pre = new PrimitiveExpression(this.Text, this.Text); pre.AcceptVisitor(this.outputVisitor, null); insertString = this.outputVisitor.Text; } else { insertString = this.Text; } textArea.InsertString(insertString); if (ch == insertString[insertString.Length - 1]) { return(true); } return(false); }
public override AstNode VisitPrimitiveExpression(PrimitiveExpression primitiveExpression, ILGenerator data) { return(primitiveExpression.AcceptVisitor(Visitor, data)); }
protected void VisitArrayCreateExpression() { ArrayCreateExpression arrayCreateExpression = this.ArrayCreateExpression; var rr = this.Emitter.Resolver.ResolveNode(arrayCreateExpression, this.Emitter) as ArrayCreateResolveResult; var at = (ArrayType)rr.Type; var rank = arrayCreateExpression.Arguments.Count; if (arrayCreateExpression.Initializer.IsNull && rank == 1) { this.Write("Bridge.Array.init("); arrayCreateExpression.Arguments.First().AcceptVisitor(this.Emitter); this.WriteComma(); var def = Inspector.GetDefaultFieldValue(at.ElementType); if (def == at.ElementType) { this.WriteFunction(); this.WriteOpenCloseParentheses(); this.BeginBlock(); this.WriteReturn(true); this.Write(Inspector.GetStructDefaultValue(at.ElementType, this.Emitter)); this.WriteSemiColon(); this.WriteNewLine(); this.EndBlock(); } else { this.WriteScript(def); } this.Write(")"); return; } if (at.Dimensions > 1) { this.Write("Bridge.Array.create("); var defaultInitializer = new PrimitiveExpression(Inspector.GetDefaultFieldValue(at.ElementType), "?"); if (defaultInitializer.Value is IType) { this.Write(Inspector.GetStructDefaultValue((IType)defaultInitializer.Value, this.Emitter)); } else { defaultInitializer.AcceptVisitor(this.Emitter); } this.WriteComma(); } if (rr.InitializerElements != null && rr.InitializerElements.Count > 0) { this.WriteOpenBracket(); var elements = arrayCreateExpression.Initializer.Elements; new ExpressionListBlock(this.Emitter, elements, null).Emit(); this.WriteCloseBracket(); } else if (at.Dimensions > 1) { this.Write("null"); } else { this.Write("[]"); } if (at.Dimensions > 1) { this.Emitter.Comma = true; for (int i = 0; i < rr.SizeArguments.Count; i++) { var a = rr.SizeArguments[i]; this.EnsureComma(false); if (a.IsCompileTimeConstant) { this.Write(a.ConstantValue); } else if (arrayCreateExpression.Arguments.Count > i) { var arg = arrayCreateExpression.Arguments.ElementAt(i); if (arg != null) { arg.AcceptVisitor(this.Emitter); } } this.Emitter.Comma = true; } this.Write(")"); this.Emitter.Comma = false; } }
protected void VisitArrayCreateExpression() { ArrayCreateExpression arrayCreateExpression = this.ArrayCreateExpression; var rr = this.ArrayCreateResolveResult ?? (this.Emitter.Resolver.ResolveNode(arrayCreateExpression, this.Emitter) as ArrayCreateResolveResult); var at = (ArrayType)rr.Type; var rank = arrayCreateExpression.Arguments.Count; if (arrayCreateExpression.Initializer.IsNull && rank == 1) { string typedArrayName = null; if (this.Emitter.AssemblyInfo.UseTypedArrays && (typedArrayName = Helpers.GetTypedArrayName(at.ElementType)) != null) { this.Write("new ", typedArrayName, "("); if (this.ArrayCreateResolveResult != null) { AttributeCreateBlock.WriteResolveResult(this.ArrayCreateResolveResult.SizeArguments.First(), this); } else { arrayCreateExpression.Arguments.First().AcceptVisitor(this.Emitter); } this.Write(")"); } else { this.Write(JS.Types.SYSTEM_ARRAY + ".init("); if (this.ArrayCreateResolveResult != null) { AttributeCreateBlock.WriteResolveResult(this.ArrayCreateResolveResult.SizeArguments.First(), this); } else { arrayCreateExpression.Arguments.First().AcceptVisitor(this.Emitter); } this.WriteComma(); var def = Inspector.GetDefaultFieldValue(at.ElementType, arrayCreateExpression.Type); if (def == at.ElementType || def is RawValue) { this.WriteFunction(); this.WriteOpenCloseParentheses(); this.BeginBlock(); this.WriteReturn(true); if (def is RawValue) { this.Write(def.ToString()); } else { this.Write(Inspector.GetStructDefaultValue(at.ElementType, this.Emitter)); } this.WriteSemiColon(); this.WriteNewLine(); this.EndBlock(); } else { this.WriteScript(def); } this.Write(")"); } return; } if (at.Dimensions > 1) { this.Write(JS.Types.SYSTEM_ARRAY + ".create("); var defaultInitializer = new PrimitiveExpression(Inspector.GetDefaultFieldValue(at.ElementType, arrayCreateExpression.Type), "?"); if (defaultInitializer.Value is IType) { this.Write(Inspector.GetStructDefaultValue((IType)defaultInitializer.Value, this.Emitter)); } else if (defaultInitializer.Value is RawValue) { this.Write(defaultInitializer.Value.ToString()); } else { defaultInitializer.AcceptVisitor(this.Emitter); } this.WriteComma(); } if (rr.InitializerElements != null && rr.InitializerElements.Count > 0) { this.WriteOpenBracket(); if (this.ArrayCreateResolveResult != null) { bool needComma = false; foreach (ResolveResult item in this.ArrayCreateResolveResult.InitializerElements) { if (needComma) { this.WriteComma(); } needComma = true; AttributeCreateBlock.WriteResolveResult(item, this); } } else { var elements = arrayCreateExpression.Initializer.Elements; new ExpressionListBlock(this.Emitter, elements, null, null, 0).Emit(); } this.WriteCloseBracket(); } else if (at.Dimensions > 1) { this.Write("null"); } else { this.Write("[]"); } if (at.Dimensions > 1) { this.Emitter.Comma = true; for (int i = 0; i < rr.SizeArguments.Count; i++) { var a = rr.SizeArguments[i]; this.EnsureComma(false); if (a.IsCompileTimeConstant) { this.Write(a.ConstantValue); } else if (this.ArrayCreateResolveResult != null) { AttributeCreateBlock.WriteResolveResult(this.ArrayCreateResolveResult.SizeArguments[i], this); } else if (arrayCreateExpression.Arguments.Count > i) { var arg = arrayCreateExpression.Arguments.ElementAt(i); if (arg != null) { arg.AcceptVisitor(this.Emitter); } } this.Emitter.Comma = true; } this.Write(")"); this.Emitter.Comma = false; } }
protected override void DoEmit() { var elements = ArrayInitializerExpression.Elements; var first = elements.Count > 0 ? elements.First() : null; var isObjectInitializer = first is NamedExpression || first is NamedArgumentExpression; var rr = Emitter.Resolver.ResolveNode(ArrayInitializerExpression) as ArrayCreateResolveResult; var at = rr != null ? (ArrayType)rr.Type : null; var create = at != null && at.Dimensions > 1; if (rr != null) { } if (!isObjectInitializer || ArrayInitializerExpression.IsSingleElement) { if (at != null) { Write(create ? JS.Types.System.Array.CREATE : JS.Types.System.Array.INIT); WriteOpenParentheses(); } if (create) { var defaultInitializer = new PrimitiveExpression(Inspector.GetDefaultFieldValue(at.ElementType, AstType.Null), "?"); if (defaultInitializer.Value is IType) { Write(Inspector.GetStructDefaultValue((IType)defaultInitializer.Value, Emitter)); } else if (defaultInitializer.Value is RawValue) { Write(defaultInitializer.Value.ToString()); } else { defaultInitializer.AcceptVisitor(Emitter); } WriteComma(); } Write("["); } else { BeginBlock(); } new ExpressionListBlock(Emitter, elements, null, null, 0, elements.Count > 2).Emit(); if (!isObjectInitializer || ArrayInitializerExpression.IsSingleElement) { Write("]"); if (at != null) { Write(", "); Write(H5Types.ToJsName(at.ElementType, Emitter)); if (create) { Emitter.Comma = true; for (int i = 0; i < rr.SizeArguments.Count; i++) { var a = rr.SizeArguments[i]; EnsureComma(false); if (a.IsCompileTimeConstant) { Write(a.ConstantValue); } else { AttributeCreateBlock.WriteResolveResult(rr.SizeArguments[i], this); } Emitter.Comma = true; } } Write(")"); } } else { WriteNewLine(); EndBlock(); } }
protected void VisitArrayCreateExpression() { ArrayCreateExpression arrayCreateExpression = this.ArrayCreateExpression; var rr = this.Emitter.Resolver.ResolveNode(arrayCreateExpression, this.Emitter) as ArrayCreateResolveResult; var at = (ArrayType)rr.Type; var rank = arrayCreateExpression.Arguments.Count; if (arrayCreateExpression.Initializer.IsNull && rank == 1) { this.Write("Bridge.Array.init("); arrayCreateExpression.Arguments.First().AcceptVisitor(this.Emitter); this.WriteComma(); var def = Inspector.GetDefaultFieldValue(at.ElementType); if (def == at.ElementType) { this.WriteFunction(); this.WriteOpenCloseParentheses(); this.BeginBlock(); this.WriteReturn(true); this.Write("new " + BridgeTypes.ToJsName(at.ElementType, this.Emitter) + "()"); this.WriteSemiColon(); this.WriteNewLine(); this.EndBlock(); } else { this.WriteScript(def); } this.Write(")"); return; } if (at.Dimensions > 1) { this.Write("Bridge.Array.create("); var defaultInitializer = new PrimitiveExpression(Inspector.GetDefaultFieldValue(at.ElementType), "?"); if (defaultInitializer == null) { this.Write("Bridge.getDefaultValue(" + BridgeTypes.ToJsName(arrayCreateExpression.Type, this.Emitter) + ")"); } else { var primitiveExpr = defaultInitializer as PrimitiveExpression; if (primitiveExpr != null && primitiveExpr.Value is AstType) { this.Write("new " + BridgeTypes.ToJsName((AstType)primitiveExpr.Value, this.Emitter) + "()"); } else { defaultInitializer.AcceptVisitor(this.Emitter); } } this.WriteComma(); } if (rr.InitializerElements != null && rr.InitializerElements.Count > 0) { this.WriteOpenBracket(); var elements = arrayCreateExpression.Initializer.Elements; new ExpressionListBlock(this.Emitter, elements, null).Emit(); this.WriteCloseBracket(); } else if (at.Dimensions > 1) { this.Write("null"); } else { this.Write("[]"); } if (at.Dimensions > 1) { this.Emitter.Comma = true; for (int i = 0; i < rr.SizeArguments.Count; i++) { var a = rr.SizeArguments[i]; this.EnsureComma(false); if (a.IsCompileTimeConstant) { this.Write(a.ConstantValue); } else if (arrayCreateExpression.Arguments.Count > i) { var arg = arrayCreateExpression.Arguments.ElementAt(i); if (arg != null) { arg.AcceptVisitor(this.Emitter); } } this.Emitter.Comma = true; } this.Write(")"); this.Emitter.Comma = false; } }
protected void VisitArrayCreateExpression() { ArrayCreateExpression arrayCreateExpression = this.ArrayCreateExpression; var rr = this.Emitter.Resolver.ResolveNode(arrayCreateExpression, this.Emitter) as ArrayCreateResolveResult; var at = (ArrayType)rr.Type; var rank = arrayCreateExpression.Arguments.Count; if (arrayCreateExpression.Initializer.IsNull && rank == 1) { this.Write("new Array("); arrayCreateExpression.Arguments.First().AcceptVisitor(this.Emitter); this.Write(")"); return; } if (at.Dimensions > 1) { this.Write("Bridge.Array.create("); var defaultInitializer = new PrimitiveExpression(Inspector.GetDefaultFieldValue(arrayCreateExpression.Type, this.Emitter.Resolver), "?"); if (defaultInitializer == null) { this.Write("Bridge.getDefaultValue(" + Helpers.TranslateTypeReference(arrayCreateExpression.Type, this.Emitter) + ")"); } else { var primitiveExpr = defaultInitializer as PrimitiveExpression; if (primitiveExpr != null && primitiveExpr.Value is AstType) { this.Write("new " + Helpers.TranslateTypeReference((AstType)primitiveExpr.Value, this.Emitter) + "()"); } else { defaultInitializer.AcceptVisitor(this.Emitter); } } this.WriteComma(); } if (rr.InitializerElements != null && rr.InitializerElements.Count > 0) { this.WriteOpenBracket(); var elements = arrayCreateExpression.Initializer.Elements; new ExpressionListBlock(this.Emitter, elements, null).Emit(); this.WriteCloseBracket(); } else if (at.Dimensions > 1) { this.Write("null"); } if (at.Dimensions > 1) { this.Emitter.Comma = true; for (int i = 0; i < rr.SizeArguments.Count; i++) { var a = rr.SizeArguments[i]; this.EnsureComma(false); if (a.IsCompileTimeConstant) { this.Write(a.ConstantValue); } else if (arrayCreateExpression.Arguments.Count > i) { var arg = arrayCreateExpression.Arguments.ElementAt(i); if (arg != null) { arg.AcceptVisitor(this.Emitter); } } this.Emitter.Comma = true; } this.Write(")"); this.Emitter.Comma = false; } }