Skip to content

Commit 3a6a689

Browse files
authored
feat(ecmascript): Fill out Value enum (#113)
1 parent 600819f commit 3a6a689

File tree

11 files changed

+1331
-168
lines changed

11 files changed

+1331
-168
lines changed

nova_vm/src/builtin_strings

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
-0
2+
[object Arguments]
23
[object Array]
34
[object Boolean]
45
[object Date]

nova_vm/src/ecmascript/builtins/ecmascript_function.rs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -597,6 +597,16 @@ pub(crate) fn make_constructor(
597597
// 2. Else,
598598
// a. Set F.[[Construct]] to the definition specified in 10.3.2.
599599
}
600+
Function::BuiltinGeneratorFunction => todo!(),
601+
Function::BuiltinConstructorFunction => todo!(),
602+
Function::BuiltinPromiseResolveFunction => todo!(),
603+
Function::BuiltinPromiseRejectFunction => todo!(),
604+
Function::BuiltinPromiseCollectorFunction => todo!(),
605+
Function::BuiltinProxyRevokerFunction => todo!(),
606+
Function::ECMAScriptAsyncFunction => todo!(),
607+
Function::ECMAScriptAsyncGeneratorFunction => todo!(),
608+
Function::ECMAScriptConstructorFunction => todo!(),
609+
Function::ECMAScriptGeneratorFunction => todo!(),
600610
}
601611
// 5. If prototype is not present, then
602612
let prototype = prototype.unwrap_or_else(|| {
@@ -685,6 +695,16 @@ pub(crate) fn set_function_name(
685695
function.name = Some(name);
686696
// 7. Return UNUSED.
687697
}
698+
Function::BuiltinGeneratorFunction => todo!(),
699+
Function::BuiltinConstructorFunction => todo!(),
700+
Function::BuiltinPromiseResolveFunction => todo!(),
701+
Function::BuiltinPromiseRejectFunction => todo!(),
702+
Function::BuiltinPromiseCollectorFunction => todo!(),
703+
Function::BuiltinProxyRevokerFunction => todo!(),
704+
Function::ECMAScriptAsyncFunction => todo!(),
705+
Function::ECMAScriptAsyncGeneratorFunction => todo!(),
706+
Function::ECMAScriptConstructorFunction => todo!(),
707+
Function::ECMAScriptGeneratorFunction => todo!(),
688708
}
689709
}
690710

nova_vm/src/ecmascript/builtins/fundamental_objects/function_objects/function_prototype.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,16 @@ impl FunctionPrototype {
175175
);
176176
Ok(Value::from_string(agent, initial_name))
177177
}
178+
Function::BuiltinGeneratorFunction => todo!(),
179+
Function::BuiltinConstructorFunction => todo!(),
180+
Function::BuiltinPromiseResolveFunction => todo!(),
181+
Function::BuiltinPromiseRejectFunction => todo!(),
182+
Function::BuiltinPromiseCollectorFunction => todo!(),
183+
Function::BuiltinProxyRevokerFunction => todo!(),
184+
Function::ECMAScriptAsyncFunction => todo!(),
185+
Function::ECMAScriptAsyncGeneratorFunction => todo!(),
186+
Function::ECMAScriptConstructorFunction => todo!(),
187+
Function::ECMAScriptGeneratorFunction => todo!(),
178188
}
179189

180190
// NOTE: NativeFunction means the following string:

nova_vm/src/ecmascript/builtins/fundamental_objects/object_objects/object_prototype.rs

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -140,14 +140,17 @@ impl ObjectPrototype {
140140
Value::Null => Ok(BUILTIN_STRING_MEMORY._object_Null_.into_value()),
141141
// 9. Else if O has a [[BooleanData]] internal slot, let builtinTag be "Boolean".
142142
// 17. Return the string-concatenation of "[object ", tag, and "]".
143-
Value::Boolean(_) => Ok(BUILTIN_STRING_MEMORY._object_Boolean_.into_value()),
143+
Value::Boolean(_) | Value::BooleanObject => {
144+
Ok(BUILTIN_STRING_MEMORY._object_Boolean_.into_value())
145+
}
144146
// 6. Else if O has a [[ParameterMap]] internal slot, let builtinTag be "Arguments".
147+
Value::Arguments => Ok(BUILTIN_STRING_MEMORY._object_Arguments_.into_value()),
145148
// 11. Else if O has a [[StringData]] internal slot, let builtinTag be "String".
146-
Value::String(_) | Value::SmallString(_) => {
149+
Value::String(_) | Value::SmallString(_) | Value::StringObject => {
147150
Ok(BUILTIN_STRING_MEMORY._object_String_.into_value())
148151
}
149152
// 10. Else if O has a [[NumberData]] internal slot, let builtinTag be "Number".
150-
Value::Number(_) | Value::Integer(_) | Value::Float(_) => {
153+
Value::Number(_) | Value::Integer(_) | Value::Float(_) | Value::NumberObject => {
151154
Ok(BUILTIN_STRING_MEMORY._object_Error_.into_value())
152155
}
153156
Value::Object(_) => todo!(),
@@ -162,9 +165,13 @@ impl ObjectPrototype {
162165
Value::BoundFunction(_) | Value::BuiltinFunction(_) | Value::ECMAScriptFunction(_) => {
163166
Ok(BUILTIN_STRING_MEMORY._object_Function_.into_value())
164167
}
168+
// TODO: Check for [[Call]] slot of Proxy
169+
Value::Proxy => todo!(),
170+
// TODO: Check for [[Call]] slot of EmbedderObject
171+
Value::EmbedderObject => todo!(),
165172
// 13. Else if O has a [[RegExpMatcher]] internal slot, let builtinTag be "RegExp".
166173
Value::RegExp(_) => Ok(BUILTIN_STRING_MEMORY._object_RegExp_.into_value()),
167-
Value::Symbol(_) | Value::BigInt(_) | Value::SmallBigInt(_) | Value::ArrayBuffer(_) => {
174+
_ => {
168175
// 14. Else, let builtinTag be "Object".
169176
let builtin_tag = BUILTIN_STRING_MEMORY.Object;
170177
// 3. Let O be ! ToObject(this value).

nova_vm/src/ecmascript/execution/environments/function_environment.rs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -302,6 +302,16 @@ impl FunctionEnvironmentIndex {
302302
.unwrap();
303303
data.ecmascript_function.home_object.is_some()
304304
}
305+
Function::BuiltinGeneratorFunction => todo!(),
306+
Function::BuiltinConstructorFunction => todo!(),
307+
Function::BuiltinPromiseResolveFunction => todo!(),
308+
Function::BuiltinPromiseRejectFunction => todo!(),
309+
Function::BuiltinPromiseCollectorFunction => todo!(),
310+
Function::BuiltinProxyRevokerFunction => todo!(),
311+
Function::ECMAScriptAsyncFunction => todo!(),
312+
Function::ECMAScriptAsyncGeneratorFunction => todo!(),
313+
Function::ECMAScriptConstructorFunction => todo!(),
314+
Function::ECMAScriptGeneratorFunction => todo!(),
305315
}
306316
}
307317

@@ -327,6 +337,16 @@ impl FunctionEnvironmentIndex {
327337
.unwrap();
328338
data.ecmascript_function.home_object
329339
}
340+
Function::BuiltinGeneratorFunction => todo!(),
341+
Function::BuiltinConstructorFunction => todo!(),
342+
Function::BuiltinPromiseResolveFunction => todo!(),
343+
Function::BuiltinPromiseRejectFunction => todo!(),
344+
Function::BuiltinPromiseCollectorFunction => todo!(),
345+
Function::BuiltinProxyRevokerFunction => todo!(),
346+
Function::ECMAScriptAsyncFunction => todo!(),
347+
Function::ECMAScriptAsyncGeneratorFunction => todo!(),
348+
Function::ECMAScriptConstructorFunction => todo!(),
349+
Function::ECMAScriptGeneratorFunction => todo!(),
330350
};
331351
// 2. If home is undefined, return undefined.
332352
let Some(home) = home else {

nova_vm/src/ecmascript/execution/realm/intrinsics.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,8 @@ use super::RealmIdentifier;
5757

5858
#[derive(Debug, Clone)]
5959
pub(crate) struct Intrinsics {
60-
object_index_base: ObjectIndex,
61-
builtin_function_index_base: BuiltinFunctionIndex,
60+
pub(crate) object_index_base: ObjectIndex,
61+
pub(crate) builtin_function_index_base: BuiltinFunctionIndex,
6262
}
6363

6464
/// Enumeration of intrinsics intended to be used as the \[\[Prototype\]\] value of

0 commit comments

Comments
 (0)