Skip to content

Commit

Permalink
Merge b8c4b0e into 0ea3cdb
Browse files Browse the repository at this point in the history
  • Loading branch information
notEthan committed Aug 2, 2023
2 parents 0ea3cdb + b8c4b0e commit c349bef
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 7 deletions.
9 changes: 7 additions & 2 deletions lib/jsi/base.rb
Expand Up @@ -154,6 +154,8 @@ def initialize(jsi_document,
self.jsi_schema_base_uri = jsi_schema_base_uri
self.jsi_schema_resource_ancestors = jsi_schema_resource_ancestors

jsi_memomaps_initialize

if jsi_instance.is_a?(JSI::Base)
raise(TypeError, "a JSI::Base instance must not be another JSI::Base. received: #{jsi_instance.pretty_inspect.chomp}")
end
Expand Down Expand Up @@ -380,7 +382,7 @@ def jsi_node_content_child(token)
# @param token (see Base#[])
# @param as_jsi (see Base#[])
# @return [JSI::Base, Object]
def jsi_child(token, as_jsi: :auto)
def jsi_child(token, as_jsi: )
child_content = jsi_node_content_child(token)

child_indicated_schemas = jsi_schemas.child_applicator_schemas(token, jsi_node_content)
Expand Down Expand Up @@ -408,7 +410,7 @@ def jsi_child(token, as_jsi: :auto)
# @param token (see Base#[])
# @param as_jsi (see Base#[])
# @return [JSI::Base, nil]
def jsi_default_child(token, as_jsi: :auto)
def jsi_default_child(token, as_jsi: )
child_content = jsi_node_content_child(token)

child_indicated_schemas = jsi_schemas.child_applicator_schemas(token, jsi_node_content)
Expand Down Expand Up @@ -655,6 +657,9 @@ def jsi_fingerprint

private

def jsi_memomaps_initialize
end

def jsi_indicated_schemas=(jsi_indicated_schemas)
@jsi_indicated_schemas = SchemaSet.ensure_schema_set(jsi_indicated_schemas)
end
Expand Down
25 changes: 20 additions & 5 deletions lib/jsi/metaschema_node.rb
Expand Up @@ -148,8 +148,8 @@ def initialize(
attr_reader :jsi_schemas

# see {Base#jsi_child}
def jsi_child(token, as_jsi: :auto)
child_node = jsi_child_node_map[token: token]
def jsi_child(token, as_jsi: )
child_node = @root_descendent_node_map[ptr: jsi_ptr[token]]

jsi_child_as_jsi(jsi_node_content_child(token), child_node.jsi_schemas, as_jsi) do
child_node
Expand Down Expand Up @@ -194,8 +194,20 @@ def jsi_fingerprint
{class: self.class, jsi_document: jsi_document}.merge(our_initialize_params)
end

protected

attr_reader :root_descendent_node_map

private

def jsi_memomaps_initialize
if jsi_ptr.root?
@root_descendent_node_map = jsi_memomap(key_by: proc { |i| i[:ptr] }, &method(:jsi_root_descendent_node_compute))
else
@root_descendent_node_map = @jsi_root_node.root_descendent_node_map
end
end

# note: does not include jsi_root_node
def our_initialize_params
{
Expand All @@ -212,10 +224,13 @@ def new_node(**params)
MetaschemaNode.new(jsi_document, jsi_root_node: jsi_root_node, **our_initialize_params, **params)
end

def jsi_child_node_map
jsi_memomap(:subinstance) do |token: |
def jsi_root_descendent_node_compute(ptr: )
#chkbug raise(Bug) unless jsi_ptr.root?
if ptr.root?
self
else
new_node(
jsi_ptr: jsi_ptr[token],
jsi_ptr: ptr,
jsi_schema_base_uri: jsi_resource_ancestor_uri,
)
end
Expand Down

0 comments on commit c349bef

Please sign in to comment.