Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
111 changes: 11 additions & 100 deletions Nodejs/Product/Analysis/Analysis/GlobalBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -226,7 +226,6 @@ private BuiltinFunctionValue ArrayFunction(out ExpandoValue arrayPrototype) {
builtinEntry,
"Array",
NewArray,
ArrayOverloads(),
null,
arrayPrototype = new BuiltinObjectValue(builtinEntry) {
SpecializedFunction(
Expand Down Expand Up @@ -465,7 +464,7 @@ private BuiltinFunctionValue BooleanFunction(out AnalysisValue booleanPrototype)
BuiltinFunction("valueOf"),
};
booleanPrototype = prototype;
return new BuiltinFunctionValue(builtinEntry, "Boolean", BooleanOverloads(), null, prototype);
return new BuiltinFunctionValue(builtinEntry, "Boolean", null, prototype);
}

private BuiltinFunctionValue DateFunction() {
Expand Down Expand Up @@ -773,7 +772,6 @@ private BuiltinFunctionValue ErrorFunction() {
return new BuiltinFunctionValue(
builtinEntry,
"Error",
ErrorOverloads(),
null,
new BuiltinObjectValue(builtinEntry) {
BuiltinFunction("constructor"),
Expand All @@ -790,10 +788,9 @@ private BuiltinFunctionValue ErrorFunction(string errorName) {
var builtinEntry = _analyzer._builtinEntry;

return new BuiltinFunctionValue(
builtinEntry,
errorName,
ErrorOverloads(errorName),
null,
builtinEntry,
errorName,
null,
new BuiltinObjectValue(builtinEntry) {
BuiltinFunction("arguments"),
BuiltinFunction("constructor"),
Expand Down Expand Up @@ -832,7 +829,7 @@ private BuiltinFunctionValue FunctionFunction(out AnalysisValue functionPrototyp
ReturningFunction("toString", _analyzer._emptyStringValue),
};
functionPrototype = prototype;
return new BuiltinFunctionValue(builtinEntry, "Function", FunctionOverloads(), null, prototype);
return new BuiltinFunctionValue(builtinEntry, "Function", null, prototype);
}

private static IAnalysisSet ApplyFunction(FunctionValue func, Node node, AnalysisUnit unit, IAnalysisSet @this, IAnalysisSet[] args) {
Expand Down Expand Up @@ -1034,7 +1031,7 @@ private BuiltinFunctionValue NumberFunction(out AnalysisValue numberPrototype) {
};
numberPrototype = prototype;

return new BuiltinFunctionValue(builtinEntry, "Number", NumberOverloads(), null, prototype) {
return new BuiltinFunctionValue(builtinEntry, "Number", null, prototype) {
Member("length", _analyzer.GetConstant(1.0)),
Member("name", _analyzer.GetConstant("Number")),
Member("arguments", _analyzer._nullInst),
Expand Down Expand Up @@ -1116,9 +1113,8 @@ private BuiltinFunctionValue ObjectFunction(out ObjectValue objectPrototype, out

return new SpecializedFunctionValue(
builtinEntry,
"Object",
"Object",
NewObject,
ObjectOverloads(),
null,
objectPrototype) {
BuiltinFunction(
Expand Down Expand Up @@ -1408,7 +1404,6 @@ private BuiltinFunctionValue RegExpFunction() {
return new BuiltinFunctionValue(
builtinEntry,
"RegExp",
RegExpOverloads(),
null,
new BuiltinObjectValue(builtinEntry) {
BuiltinFunction("compile"),
Expand Down Expand Up @@ -1646,7 +1641,7 @@ private BuiltinFunctionValue StringFunction(out AnalysisValue stringPrototype) {
};
stringPrototype = prototype;

return new BuiltinFunctionValue(builtinEntry, "String", StringOverloads(), null, prototype) {
return new BuiltinFunctionValue(builtinEntry, "String", null, prototype) {
ReturningFunction("fromCharCode", _analyzer.GetConstant(String.Empty)),
};
}
Expand Down Expand Up @@ -1681,94 +1676,10 @@ private static IAnalysisSet StringToLowerCase(FunctionValue func, Node node, Ana
return unit.Analyzer._emptyStringValue.SelfSet;
}
return res;
}

#region Constructor Overloads

private OverloadResult[] ArrayOverloads() {
return new OverloadResult[] {
new SimpleOverloadResult("Array", "Create a new and empty array."),
new SimpleOverloadResult("Array", "Create a new array with specific length.",
Parameter("length", "Length of the new array. Must be between 0 and 2^32-1, inclusive.")),
new SimpleOverloadResult("Array", "Create a new array with initial elements.",
Parameter("item1", "Initial element of the array."),
Parameter("item2", "Initial element of the array."),
Parameter("[...]", "Initial element of the array."))
};
}

private OverloadResult[] StringOverloads() {
return new OverloadResult[] {
new SimpleOverloadResult(
"String",
"Create a new string.",
Parameter("thing", "Anything to be converted to a string. If unspecified, an empty string is returned.", isOptional: true)
)
};
}

private OverloadResult[] NumberOverloads() {
return new OverloadResult[] {
new SimpleOverloadResult(
"Number",
"Create a new object wrapper for a numerical value.",
Parameter("value", "The numeric value of the number being created. If unspecified, 0 is returned.", isOptional: true)
)
};
}

private OverloadResult[] BooleanOverloads() {
return new OverloadResult[] {
new SimpleOverloadResult(
"Boolean",
"Create a new object wrapper for a boolean value.",
Parameter("value", "The initial value of the Boolean object. In unspecified, <false> is returned.", isOptional: true)
)
};
}

private OverloadResult[] ErrorOverloads(string errorName = "Error") {
return new OverloadResult[] {
new SimpleOverloadResult(
errorName,
String.Format("Create an {0} object.", errorName),
Parameter("message", "Human-readable description of the error.", isOptional: true)
)
};
}

private OverloadResult[] ObjectOverloads() {
return new OverloadResult[] {
new SimpleOverloadResult(
"Object",
"Create an object wrapper that corresponds to a given value.",
Parameter("value", "Any value. If the value is unspecified, null or undefined, returns an empty object.", isOptional: true))
};
}

private OverloadResult[] RegExpOverloads() {
return new OverloadResult[] {
new SimpleOverloadResult("RegExp", "Create a regular expression for matching text with a pattern.",
Parameter("pattern", "The text of the regular expression"),
Parameter("flags", "A combination of g (global match), i (ignore case) and m (multiline).", isOptional: true))
};
}

private OverloadResult[] FunctionOverloads() {
return new OverloadResult[] {
new SimpleOverloadResult("Function", "Create a new and empty function."),
new SimpleOverloadResult("Function", "Create a new function.",
Parameter("body", "A string containing the JavaScript statements comprising the function definition.")),
new SimpleOverloadResult("Function", "Create a new function with arguments.",
Parameter("arg...", "Name of argument of the function.", isOptional: true),
Parameter("body", "A string containing the JavaScript statements comprising the function definition."))
};
}

#endregion

}

#region Building Helpers

private static MemberAddInfo Member(string name, AnalysisValue value) {
return new MemberAddInfo(name, value);
}
Expand Down
5 changes: 0 additions & 5 deletions Nodejs/Product/Analysis/Analysis/OverloadResult.cs
Original file line number Diff line number Diff line change
Expand Up @@ -43,11 +43,6 @@ public virtual ParameterResult[] Parameters {

class SimpleOverloadResult : OverloadResult {
private readonly string _documentation;

public SimpleOverloadResult(string name, string documentation) : base(name) {
_documentation = documentation;
}

public SimpleOverloadResult(string name, string documentation, params ParameterResult[] parameters)
: base(name, parameters) {
_documentation = documentation;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -171,15 +171,8 @@ internal class SpecializedFunctionValue : BuiltinFunctionValue {
public SpecializedFunctionValue(ProjectEntry projectEntry, string name, CallDelegate func, string documentation = null, ExpandoValue prototype = null, params ParameterResult[] signature)
: base(projectEntry, name, documentation, prototype, signature) {
_func = func;
}

public SpecializedFunctionValue(ProjectEntry projectEntry, string name, CallDelegate func, OverloadResult[] overloads, string documentation = null, ExpandoValue prototype = null)
: base(projectEntry, name, overloads, documentation, prototype)
{
_func = func;
}


public override IAnalysisSet Call(Node node, AnalysisUnit unit, IAnalysisSet @this, IAnalysisSet[] args) {
return _func(this, node, unit, @this, args);
}
Expand Down