Beispiel #1
0
        public static void WriteBlock <T>(this JsWriter writer, ICollection <T> seq, string separator) where T : JsNode
        {
//			if (seq.Count <= 1)
//			{
//				writer.Write("{");
//				writer.Write(seq, separator);
//				writer.Write("}");
//				return;
//			}

            writer.WriteLine("{");
            writer.Indent();
            writer.Write(seq, separator);
            writer.WriteLine();
            writer.Unindent();
            writer.Write("}");
        }
Beispiel #2
0
        public override void Write(JsWriter writer)
        {
            if (_deps.Count > 0)
            {
                writer.Write(_deps, "\n");
                writer.WriteLine();
            }

            if (_namespaces.Count > 0)
            {
                writer.WriteLine("// namespaces");
                writer.Write(_namespaces.Values.OrderBy(x => x.Name), "\n");
                writer.WriteLine();
            }

            writer.Write(_nodes, "\n");
        }
Beispiel #3
0
        public override void Write(JsWriter writer)
        {
            bool br = _value is JsFunction;

            if (br)
            {
                writer.Write("(");
            }
            _value.Write(writer);
            if (br)
            {
                writer.Write(")");
            }
            writer.Write("(");
            writer.WriteValues(_args, ", ");
            writer.Write(")");
        }
Beispiel #4
0
        public static void WriteValues(this JsWriter writer, IEnumerable seq, string sep)
        {
            if (seq == null)
            {
                return;
            }
            bool f = false;

            foreach (var value in seq)
            {
                if (f)
                {
                    writer.Write(sep);
                }
                writer.WriteValue(value);
                f = true;
            }
        }
Beispiel #5
0
        public override void Write(JsWriter writer)
        {
            _obj.Write(writer);

            var s = _name as String;

            if (s != null && s.IsJsid())
            {
                writer.Write(".");
                writer.Write(s);
            }
            else
            {
                writer.Write("[");
                writer.WriteValue(_name);
                writer.Write("]");
            }
        }
Beispiel #6
0
        public static void Write <T>(this JsWriter writer, IEnumerable <T> seq, string sep) where T : JsNode
        {
            if (seq == null)
            {
                return;
            }

            bool f = false;

            foreach (var node in seq)
            {
                if (f && !string.IsNullOrEmpty(sep))
                {
                    writer.Write(sep);
                }
                node.Write(writer);
                f = true;
            }
        }
Beispiel #7
0
        public override void Write(JsWriter writer)
        {
            writer.Write("/* {0} */", _instruction.ToString("I: N", CultureInfo.InvariantCulture));
            writer.Write("[");
            writer.Write((int)_instruction.Code);

            var value = _value;

            if (value != null && !Ignore(_instruction.Code))
            {
                writer.Write(", ");

                switch (Type.GetTypeCode(value.GetType()))
                {
                case TypeCode.Boolean:
                case TypeCode.Char:
                case TypeCode.SByte:
                case TypeCode.Byte:
                case TypeCode.Int16:
                case TypeCode.UInt16:
                case TypeCode.Int32:
                case TypeCode.UInt32:
                case TypeCode.Single:
                case TypeCode.Double:
                case TypeCode.String:
                    writer.WriteValue(value);
                    break;

                case TypeCode.Object:
                    var var = value as JsVar;
                    writer.WriteValue(var != null ? var.Id() : value);
                    break;

                default:
                    throw new NotSupportedException();
                }
            }

            writer.Write("]");
        }
Beispiel #8
0
        public override void Write(JsWriter writer)
        {
            var    name     = Type.JsFullName();
            string baseName = null;

            if (Base != null)
            {
                baseName = Base.Type.JsFullName();
            }

            WriteClassFunction(writer, baseName, name);
            WriteGetFields(writer, baseName, name);
            WriteStaticFields(writer, name);

            writer.Write(_members, "\n");

            if (Base != null)
            {
                writer.WriteLine();
                //TODO: enable when explicit base ref will be needed
                //writer.WriteLine("{0}.prototype.$base = {1}.prototype;", name, baseName);
                writer.WriteLine("$inherit({0}, {1});", name, baseName);
            }
        }
Beispiel #9
0
        public static void WriteValue(this JsWriter writer, object value)
        {
            if (value == null)
            {
                writer.Write("null");
                return;
            }

            switch (Type.GetTypeCode(value.GetType()))
            {
            case TypeCode.Empty:
            case TypeCode.DBNull:
                writer.Write("null");
                break;

            case TypeCode.Boolean:
                writer.Write((bool)value ? "true" : "false");
                break;

            case TypeCode.Char:
                break;

            case TypeCode.SByte:
            case TypeCode.Byte:
            case TypeCode.Int16:
            case TypeCode.UInt16:
            case TypeCode.Int32:
            case TypeCode.UInt32:
            case TypeCode.Int64:
            case TypeCode.UInt64:
            case TypeCode.Single:
            case TypeCode.Double:
            case TypeCode.Decimal:
                writer.Write(Convert.ToString(value, CultureInfo.InvariantCulture));
                break;

            case TypeCode.DateTime:
                break;

            case TypeCode.String:
                writer.Write("'" + ((string)value).JsEscape() + "'");
                break;

            case TypeCode.Object:
                var obj = value as JsNode;
                if (obj != null)
                {
                    obj.Write(writer);
                    return;
                }

                var sequence = value as IEnumerable;
                if (sequence != null)
                {
                    writer.Write("[");
                    var sep = false;
                    foreach (var item in sequence)
                    {
                        if (sep)
                        {
                            writer.Write(",");
                        }
                        WriteValue(writer, item);
                        sep = true;
                    }
                    writer.Write("]");
                    return;
                }

                throw new NotSupportedException();

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
Beispiel #10
0
 public override void Write(JsWriter writer)
 {
     writer.Write(_op);
     _value.Write(writer);
 }
Beispiel #11
0
 public override void Write(JsWriter writer)
 {
     writer.WriteValues(Args, " || ");
 }
Beispiel #12
0
 public override void Write(JsWriter writer)
 {
     writer.WriteBlock(_kids, "\n");
 }
Beispiel #13
0
 public override void Write(JsWriter writer)
 {
     writer.Write(_text);
 }
Beispiel #14
0
 public override void Write(JsWriter writer)
 {
     writer.Write(Value);
 }
Beispiel #15
0
 public override void Write(JsWriter writer)
 {
     writer.Write("var {0} = ", Name);
     Value.Write(writer);
     writer.Write(";");
 }
Beispiel #16
0
 public abstract void Write(JsWriter writer);
Beispiel #17
0
        private void WriteClassFunction(JsWriter writer, string baseName, string name)
        {
            if (Type.IsAvmString())
            {
                return;
            }

            if (Type.IsInt64())
            {
                writer.WriteLine("{0} = function(hi, lo) {{", name);
                writer.Indent();
                writer.WriteLine("this.m_hi = hi ? hi : 0;");
                writer.WriteLine("this.m_lo = lo ? lo : 0;");
                writer.WriteLine("return this;");
                writer.Unindent();
                writer.WriteLine("};");                 // end of function
                return;
            }

            if (Type.IsBoxableType())
            {
                var valueType = Type.IsEnum ? Type.ValueType : Type;
                writer.WriteLine("{0} = function(v) {{", name);
                writer.Indent();
                writer.WriteLine("this.{0} = v !== undefined ? v : {1};", SpecialFields.BoxValue, valueType.InitialValue().ToJsString());
                writer.WriteLine("return this;");
                writer.Unindent();
                writer.WriteLine("};");                 // end of function
                return;
            }

            if (Type.IsNullableInstance())
            {
                writer.WriteLine("{0} = function(v) {{", name);
                writer.Indent();

                var valueType = Type.GetTypeArgument(0);
                writer.WriteLine("this.{0} = v !== undefined ? v : {1};", SpecialFields.BoxValue, valueType.InitialValue().ToJsString());
                writer.WriteLine("this.{0} = v !== undefined;", Type.GetHasValueField().JsName());
                writer.WriteLine("return this;");

                writer.Unindent();
                writer.WriteLine("};");                 // end of function
                return;
            }

            writer.WriteLine("{0} = function() {{", name);
            if (_instanceFields.Count > 0 || baseName != null)
            {
                writer.Indent();

                if (baseName != null)
                {
                    writer.WriteLine("{0}.apply(this);", baseName);
                }

                if (_instanceFields.Count > 0)
                {
                    writer.Write(_instanceFields, "\n");
                    writer.WriteLine();
                }

                writer.WriteLine("return this;");
                writer.Unindent();
            }
            writer.WriteLine("};");             // end of function
        }
Beispiel #18
0
 public override void Write(JsWriter writer)
 {
     _expression.Write(writer);
     writer.Write(";");
 }
Beispiel #19
0
 public override void Write(JsWriter writer)
 {
     throw new NotSupportedException();
 }
Beispiel #20
0
 public override void Write(JsWriter writer)
 {
     writer.Write("[");
     writer.WriteValues(_values, "," + _separator);
     writer.Write("]");
 }
Beispiel #21
0
 public override void Write(JsWriter writer)
 {
     writer.Write("return ");
     writer.WriteValue(_value);
     writer.Write(";");
 }
Beispiel #22
0
 public override void Write(JsWriter writer)
 {
     writer.Write("{0} = ", PoolName);
     new JsArray(_list.Cast <object>()).Write(writer);
     writer.WriteLine(";");
 }