From ef3c5dbe0d9191b813b90a0014041494eebf9a8c Mon Sep 17 00:00:00 2001 From: Michael Thomson Date: Sat, 21 Sep 2024 11:32:56 -0400 Subject: [PATCH] chatper 1: ex1 --- .envrc | 1 + .gitignore | 2 + c1/.clang-format | 743 +++++++++++++++++++++++++++++++++++++++ c1/a.out | Bin 0 -> 53376 bytes c1/compile_commands.json | 42 +++ c1/main | Bin 0 -> 16824 bytes c1/main.c | 39 ++ c1/main.o | Bin 0 -> 5040 bytes c1/makefile | 17 + c1/prog1.c | 16 + c1/prog1.h | 8 + c1/prog1.o | Bin 0 -> 5216 bytes c1/slp.c | 80 +++++ c1/slp.h | 65 ++++ c1/slp.o | Bin 0 -> 7288 bytes c1/util.c | 9 + c1/util.h | 16 + c1/util.o | Bin 0 -> 3512 bytes flake.lock | 25 ++ flake.nix | 39 ++ 20 files changed, 1102 insertions(+) create mode 100644 .envrc create mode 100644 .gitignore create mode 100644 c1/.clang-format create mode 100755 c1/a.out create mode 100644 c1/compile_commands.json create mode 100755 c1/main create mode 100644 c1/main.c create mode 100644 c1/main.o create mode 100644 c1/makefile create mode 100644 c1/prog1.c create mode 100644 c1/prog1.h create mode 100644 c1/prog1.o create mode 100644 c1/slp.c create mode 100644 c1/slp.h create mode 100644 c1/slp.o create mode 100644 c1/util.c create mode 100644 c1/util.h create mode 100644 c1/util.o create mode 100644 flake.lock create mode 100644 flake.nix diff --git a/.envrc b/.envrc new file mode 100644 index 0000000..3550a30 --- /dev/null +++ b/.envrc @@ -0,0 +1 @@ +use flake diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ee080b2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.direnv +.ccls-cache diff --git a/c1/.clang-format b/c1/.clang-format new file mode 100644 index 0000000..252820d --- /dev/null +++ b/c1/.clang-format @@ -0,0 +1,743 @@ +# SPDX-License-Identifier: GPL-2.0 +# +# clang-format configuration file. Intended for clang-format >= 11. +# +# For more information, see: +# +# Documentation/dev-tools/clang-format.rst +# https://clang.llvm.org/docs/ClangFormat.html +# https://clang.llvm.org/docs/ClangFormatStyleOptions.html +# +--- +AccessModifierOffset: -4 +AlignAfterOpenBracket: Align +AlignConsecutiveAssignments: false +AlignConsecutiveDeclarations: false +AlignEscapedNewlines: Left +AlignOperands: true +AlignTrailingComments: false +AllowAllParametersOfDeclarationOnNextLine: false +AllowShortBlocksOnASingleLine: false +AllowShortCaseLabelsOnASingleLine: false +AllowShortFunctionsOnASingleLine: None +AllowShortIfStatementsOnASingleLine: false +AllowShortLoopsOnASingleLine: false +AlwaysBreakAfterDefinitionReturnType: None +AlwaysBreakAfterReturnType: None +AlwaysBreakBeforeMultilineStrings: false +AlwaysBreakTemplateDeclarations: false +BinPackArguments: true +BinPackParameters: true +BraceWrapping: + AfterClass: false + AfterControlStatement: false + AfterEnum: false + AfterFunction: true + AfterNamespace: true + AfterObjCDeclaration: false + AfterStruct: false + AfterUnion: false + AfterExternBlock: false + BeforeCatch: false + BeforeElse: false + IndentBraces: false + SplitEmptyFunction: true + SplitEmptyRecord: true + SplitEmptyNamespace: true +BreakBeforeBinaryOperators: None +BreakBeforeBraces: Custom +BreakBeforeInheritanceComma: false +BreakBeforeTernaryOperators: false +BreakConstructorInitializersBeforeComma: false +BreakConstructorInitializers: BeforeComma +BreakAfterJavaFieldAnnotations: false +BreakStringLiterals: false +ColumnLimit: 80 +CommentPragmas: '^ IWYU pragma:' +CompactNamespaces: false +ConstructorInitializerAllOnOneLineOrOnePerLine: false +ConstructorInitializerIndentWidth: 8 +ContinuationIndentWidth: 8 +Cpp11BracedListStyle: false +DerivePointerAlignment: false +DisableFormat: false +ExperimentalAutoDetectBinPacking: false +FixNamespaceComments: false + +# Taken from: +# git grep -h '^#define [^[:space:]]*for_each[^[:space:]]*(' include/ tools/ \ +# | sed "s,^#define \([^[:space:]]*for_each[^[:space:]]*\)(.*$, - '\1'," \ +# | LC_ALL=C sort -u +ForEachMacros: + - '__ata_qc_for_each' + - '__bio_for_each_bvec' + - '__bio_for_each_segment' + - '__evlist__for_each_entry' + - '__evlist__for_each_entry_continue' + - '__evlist__for_each_entry_from' + - '__evlist__for_each_entry_reverse' + - '__evlist__for_each_entry_safe' + - '__for_each_mem_range' + - '__for_each_mem_range_rev' + - '__for_each_thread' + - '__hlist_for_each_rcu' + - '__map__for_each_symbol_by_name' + - '__pci_bus_for_each_res0' + - '__pci_bus_for_each_res1' + - '__pci_dev_for_each_res0' + - '__pci_dev_for_each_res1' + - '__perf_evlist__for_each_entry' + - '__perf_evlist__for_each_entry_reverse' + - '__perf_evlist__for_each_entry_safe' + - '__rq_for_each_bio' + - '__shost_for_each_device' + - '__sym_for_each' + - 'apei_estatus_for_each_section' + - 'ata_for_each_dev' + - 'ata_for_each_link' + - 'ata_qc_for_each' + - 'ata_qc_for_each_raw' + - 'ata_qc_for_each_with_internal' + - 'ax25_for_each' + - 'ax25_uid_for_each' + - 'bio_for_each_bvec' + - 'bio_for_each_bvec_all' + - 'bio_for_each_folio_all' + - 'bio_for_each_integrity_vec' + - 'bio_for_each_segment' + - 'bio_for_each_segment_all' + - 'bio_list_for_each' + - 'bip_for_each_vec' + - 'bond_for_each_slave' + - 'bond_for_each_slave_rcu' + - 'bpf_for_each' + - 'bpf_for_each_reg_in_vstate' + - 'bpf_for_each_reg_in_vstate_mask' + - 'bpf_for_each_spilled_reg' + - 'bpf_object__for_each_map' + - 'bpf_object__for_each_program' + - 'btree_for_each_safe128' + - 'btree_for_each_safe32' + - 'btree_for_each_safe64' + - 'btree_for_each_safel' + - 'card_for_each_dev' + - 'cgroup_taskset_for_each' + - 'cgroup_taskset_for_each_leader' + - 'cpu_aggr_map__for_each_idx' + - 'cpufreq_for_each_efficient_entry_idx' + - 'cpufreq_for_each_entry' + - 'cpufreq_for_each_entry_idx' + - 'cpufreq_for_each_valid_entry' + - 'cpufreq_for_each_valid_entry_idx' + - 'css_for_each_child' + - 'css_for_each_descendant_post' + - 'css_for_each_descendant_pre' + - 'damon_for_each_region' + - 'damon_for_each_region_from' + - 'damon_for_each_region_safe' + - 'damon_for_each_scheme' + - 'damon_for_each_scheme_safe' + - 'damon_for_each_target' + - 'damon_for_each_target_safe' + - 'damos_for_each_filter' + - 'damos_for_each_filter_safe' + - 'data__for_each_file' + - 'data__for_each_file_new' + - 'data__for_each_file_start' + - 'device_for_each_child_node' + - 'displayid_iter_for_each' + - 'dma_fence_array_for_each' + - 'dma_fence_chain_for_each' + - 'dma_fence_unwrap_for_each' + - 'dma_resv_for_each_fence' + - 'dma_resv_for_each_fence_unlocked' + - 'do_for_each_ftrace_op' + - 'drm_atomic_crtc_for_each_plane' + - 'drm_atomic_crtc_state_for_each_plane' + - 'drm_atomic_crtc_state_for_each_plane_state' + - 'drm_atomic_for_each_plane_damage' + - 'drm_client_for_each_connector_iter' + - 'drm_client_for_each_modeset' + - 'drm_connector_for_each_possible_encoder' + - 'drm_exec_for_each_locked_object' + - 'drm_exec_for_each_locked_object_reverse' + - 'drm_for_each_bridge_in_chain' + - 'drm_for_each_connector_iter' + - 'drm_for_each_crtc' + - 'drm_for_each_crtc_reverse' + - 'drm_for_each_encoder' + - 'drm_for_each_encoder_mask' + - 'drm_for_each_fb' + - 'drm_for_each_legacy_plane' + - 'drm_for_each_plane' + - 'drm_for_each_plane_mask' + - 'drm_for_each_privobj' + - 'drm_gem_for_each_gpuva' + - 'drm_gem_for_each_gpuva_safe' + - 'drm_gpuva_for_each_op' + - 'drm_gpuva_for_each_op_from_reverse' + - 'drm_gpuva_for_each_op_safe' + - 'drm_gpuvm_for_each_va' + - 'drm_gpuvm_for_each_va_range' + - 'drm_gpuvm_for_each_va_range_safe' + - 'drm_gpuvm_for_each_va_safe' + - 'drm_mm_for_each_hole' + - 'drm_mm_for_each_node' + - 'drm_mm_for_each_node_in_range' + - 'drm_mm_for_each_node_safe' + - 'dsa_switch_for_each_available_port' + - 'dsa_switch_for_each_cpu_port' + - 'dsa_switch_for_each_cpu_port_continue_reverse' + - 'dsa_switch_for_each_port' + - 'dsa_switch_for_each_port_continue_reverse' + - 'dsa_switch_for_each_port_safe' + - 'dsa_switch_for_each_user_port' + - 'dsa_tree_for_each_cpu_port' + - 'dsa_tree_for_each_user_port' + - 'dsa_tree_for_each_user_port_continue_reverse' + - 'dso__for_each_symbol' + - 'dsos__for_each_with_build_id' + - 'elf_hash_for_each_possible' + - 'elf_symtab__for_each_symbol' + - 'evlist__for_each_cpu' + - 'evlist__for_each_entry' + - 'evlist__for_each_entry_continue' + - 'evlist__for_each_entry_from' + - 'evlist__for_each_entry_reverse' + - 'evlist__for_each_entry_safe' + - 'flow_action_for_each' + - 'for_each_acpi_consumer_dev' + - 'for_each_acpi_dev_match' + - 'for_each_active_dev_scope' + - 'for_each_active_drhd_unit' + - 'for_each_active_iommu' + - 'for_each_active_route' + - 'for_each_aggr_pgid' + - 'for_each_and_bit' + - 'for_each_andnot_bit' + - 'for_each_available_child_of_node' + - 'for_each_bench' + - 'for_each_bio' + - 'for_each_board_func_rsrc' + - 'for_each_btf_ext_rec' + - 'for_each_btf_ext_sec' + - 'for_each_bvec' + - 'for_each_card_auxs' + - 'for_each_card_auxs_safe' + - 'for_each_card_components' + - 'for_each_card_dapms' + - 'for_each_card_pre_auxs' + - 'for_each_card_prelinks' + - 'for_each_card_rtds' + - 'for_each_card_rtds_safe' + - 'for_each_card_widgets' + - 'for_each_card_widgets_safe' + - 'for_each_cgroup_storage_type' + - 'for_each_child_of_node' + - 'for_each_clear_bit' + - 'for_each_clear_bit_from' + - 'for_each_clear_bitrange' + - 'for_each_clear_bitrange_from' + - 'for_each_cmd' + - 'for_each_cmsghdr' + - 'for_each_collection' + - 'for_each_comp_order' + - 'for_each_compatible_node' + - 'for_each_component_dais' + - 'for_each_component_dais_safe' + - 'for_each_conduit' + - 'for_each_console' + - 'for_each_console_srcu' + - 'for_each_cpu' + - 'for_each_cpu_and' + - 'for_each_cpu_andnot' + - 'for_each_cpu_or' + - 'for_each_cpu_wrap' + - 'for_each_dapm_widgets' + - 'for_each_dedup_cand' + - 'for_each_dev_addr' + - 'for_each_dev_scope' + - 'for_each_dma_cap_mask' + - 'for_each_dpcm_be' + - 'for_each_dpcm_be_rollback' + - 'for_each_dpcm_be_safe' + - 'for_each_dpcm_fe' + - 'for_each_drhd_unit' + - 'for_each_dss_dev' + - 'for_each_efi_memory_desc' + - 'for_each_efi_memory_desc_in_map' + - 'for_each_element' + - 'for_each_element_extid' + - 'for_each_element_id' + - 'for_each_endpoint_of_node' + - 'for_each_event' + - 'for_each_event_tps' + - 'for_each_evictable_lru' + - 'for_each_fib6_node_rt_rcu' + - 'for_each_fib6_walker_rt' + - 'for_each_free_mem_pfn_range_in_zone' + - 'for_each_free_mem_pfn_range_in_zone_from' + - 'for_each_free_mem_range' + - 'for_each_free_mem_range_reverse' + - 'for_each_func_rsrc' + - 'for_each_gpiochip_node' + - 'for_each_group_evsel' + - 'for_each_group_evsel_head' + - 'for_each_group_member' + - 'for_each_group_member_head' + - 'for_each_hstate' + - 'for_each_if' + - 'for_each_inject_fn' + - 'for_each_insn' + - 'for_each_insn_prefix' + - 'for_each_intid' + - 'for_each_iommu' + - 'for_each_ip_tunnel_rcu' + - 'for_each_irq_nr' + - 'for_each_lang' + - 'for_each_link_codecs' + - 'for_each_link_cpus' + - 'for_each_link_platforms' + - 'for_each_lru' + - 'for_each_matching_node' + - 'for_each_matching_node_and_match' + - 'for_each_media_entity_data_link' + - 'for_each_mem_pfn_range' + - 'for_each_mem_range' + - 'for_each_mem_range_rev' + - 'for_each_mem_region' + - 'for_each_member' + - 'for_each_memory' + - 'for_each_migratetype_order' + - 'for_each_missing_reg' + - 'for_each_mle_subelement' + - 'for_each_mod_mem_type' + - 'for_each_net' + - 'for_each_net_continue_reverse' + - 'for_each_net_rcu' + - 'for_each_netdev' + - 'for_each_netdev_continue' + - 'for_each_netdev_continue_rcu' + - 'for_each_netdev_continue_reverse' + - 'for_each_netdev_dump' + - 'for_each_netdev_feature' + - 'for_each_netdev_in_bond_rcu' + - 'for_each_netdev_rcu' + - 'for_each_netdev_reverse' + - 'for_each_netdev_safe' + - 'for_each_new_connector_in_state' + - 'for_each_new_crtc_in_state' + - 'for_each_new_mst_mgr_in_state' + - 'for_each_new_plane_in_state' + - 'for_each_new_plane_in_state_reverse' + - 'for_each_new_private_obj_in_state' + - 'for_each_new_reg' + - 'for_each_node' + - 'for_each_node_by_name' + - 'for_each_node_by_type' + - 'for_each_node_mask' + - 'for_each_node_state' + - 'for_each_node_with_cpus' + - 'for_each_node_with_property' + - 'for_each_nonreserved_multicast_dest_pgid' + - 'for_each_numa_hop_mask' + - 'for_each_of_allnodes' + - 'for_each_of_allnodes_from' + - 'for_each_of_cpu_node' + - 'for_each_of_pci_range' + - 'for_each_old_connector_in_state' + - 'for_each_old_crtc_in_state' + - 'for_each_old_mst_mgr_in_state' + - 'for_each_old_plane_in_state' + - 'for_each_old_private_obj_in_state' + - 'for_each_oldnew_connector_in_state' + - 'for_each_oldnew_crtc_in_state' + - 'for_each_oldnew_mst_mgr_in_state' + - 'for_each_oldnew_plane_in_state' + - 'for_each_oldnew_plane_in_state_reverse' + - 'for_each_oldnew_private_obj_in_state' + - 'for_each_online_cpu' + - 'for_each_online_node' + - 'for_each_online_pgdat' + - 'for_each_or_bit' + - 'for_each_path' + - 'for_each_pci_bridge' + - 'for_each_pci_dev' + - 'for_each_pcm_streams' + - 'for_each_physmem_range' + - 'for_each_populated_zone' + - 'for_each_possible_cpu' + - 'for_each_present_blessed_reg' + - 'for_each_present_cpu' + - 'for_each_prime_number' + - 'for_each_prime_number_from' + - 'for_each_probe_cache_entry' + - 'for_each_process' + - 'for_each_process_thread' + - 'for_each_prop_codec_conf' + - 'for_each_prop_dai_codec' + - 'for_each_prop_dai_cpu' + - 'for_each_prop_dlc_codecs' + - 'for_each_prop_dlc_cpus' + - 'for_each_prop_dlc_platforms' + - 'for_each_property_of_node' + - 'for_each_reg' + - 'for_each_reg_filtered' + - 'for_each_reloc' + - 'for_each_reloc_from' + - 'for_each_requested_gpio' + - 'for_each_requested_gpio_in_range' + - 'for_each_reserved_mem_range' + - 'for_each_reserved_mem_region' + - 'for_each_rtd_codec_dais' + - 'for_each_rtd_components' + - 'for_each_rtd_cpu_dais' + - 'for_each_rtd_dais' + - 'for_each_sband_iftype_data' + - 'for_each_script' + - 'for_each_sec' + - 'for_each_set_bit' + - 'for_each_set_bit_from' + - 'for_each_set_bit_wrap' + - 'for_each_set_bitrange' + - 'for_each_set_bitrange_from' + - 'for_each_set_clump8' + - 'for_each_sg' + - 'for_each_sg_dma_page' + - 'for_each_sg_page' + - 'for_each_sgtable_dma_page' + - 'for_each_sgtable_dma_sg' + - 'for_each_sgtable_page' + - 'for_each_sgtable_sg' + - 'for_each_sibling_event' + - 'for_each_sta_active_link' + - 'for_each_subelement' + - 'for_each_subelement_extid' + - 'for_each_subelement_id' + - 'for_each_sublist' + - 'for_each_subsystem' + - 'for_each_supported_activate_fn' + - 'for_each_supported_inject_fn' + - 'for_each_sym' + - 'for_each_test' + - 'for_each_thread' + - 'for_each_token' + - 'for_each_unicast_dest_pgid' + - 'for_each_valid_link' + - 'for_each_vif_active_link' + - 'for_each_vma' + - 'for_each_vma_range' + - 'for_each_vsi' + - 'for_each_wakeup_source' + - 'for_each_zone' + - 'for_each_zone_zonelist' + - 'for_each_zone_zonelist_nodemask' + - 'func_for_each_insn' + - 'fwnode_for_each_available_child_node' + - 'fwnode_for_each_child_node' + - 'fwnode_for_each_parent_node' + - 'fwnode_graph_for_each_endpoint' + - 'gadget_for_each_ep' + - 'genradix_for_each' + - 'genradix_for_each_from' + - 'genradix_for_each_reverse' + - 'hash_for_each' + - 'hash_for_each_possible' + - 'hash_for_each_possible_rcu' + - 'hash_for_each_possible_rcu_notrace' + - 'hash_for_each_possible_safe' + - 'hash_for_each_rcu' + - 'hash_for_each_safe' + - 'hashmap__for_each_entry' + - 'hashmap__for_each_entry_safe' + - 'hashmap__for_each_key_entry' + - 'hashmap__for_each_key_entry_safe' + - 'hctx_for_each_ctx' + - 'hists__for_each_format' + - 'hists__for_each_sort_list' + - 'hlist_bl_for_each_entry' + - 'hlist_bl_for_each_entry_rcu' + - 'hlist_bl_for_each_entry_safe' + - 'hlist_for_each' + - 'hlist_for_each_entry' + - 'hlist_for_each_entry_continue' + - 'hlist_for_each_entry_continue_rcu' + - 'hlist_for_each_entry_continue_rcu_bh' + - 'hlist_for_each_entry_from' + - 'hlist_for_each_entry_from_rcu' + - 'hlist_for_each_entry_rcu' + - 'hlist_for_each_entry_rcu_bh' + - 'hlist_for_each_entry_rcu_notrace' + - 'hlist_for_each_entry_safe' + - 'hlist_for_each_entry_srcu' + - 'hlist_for_each_safe' + - 'hlist_nulls_for_each_entry' + - 'hlist_nulls_for_each_entry_from' + - 'hlist_nulls_for_each_entry_rcu' + - 'hlist_nulls_for_each_entry_safe' + - 'i3c_bus_for_each_i2cdev' + - 'i3c_bus_for_each_i3cdev' + - 'idr_for_each_entry' + - 'idr_for_each_entry_continue' + - 'idr_for_each_entry_continue_ul' + - 'idr_for_each_entry_ul' + - 'in_dev_for_each_ifa_rcu' + - 'in_dev_for_each_ifa_rtnl' + - 'inet_bind_bucket_for_each' + - 'interval_tree_for_each_span' + - 'intlist__for_each_entry' + - 'intlist__for_each_entry_safe' + - 'kcore_copy__for_each_phdr' + - 'key_for_each' + - 'key_for_each_safe' + - 'klp_for_each_func' + - 'klp_for_each_func_safe' + - 'klp_for_each_func_static' + - 'klp_for_each_object' + - 'klp_for_each_object_safe' + - 'klp_for_each_object_static' + - 'kunit_suite_for_each_test_case' + - 'kvm_for_each_memslot' + - 'kvm_for_each_memslot_in_gfn_range' + - 'kvm_for_each_vcpu' + - 'libbpf_nla_for_each_attr' + - 'list_for_each' + - 'list_for_each_codec' + - 'list_for_each_codec_safe' + - 'list_for_each_continue' + - 'list_for_each_entry' + - 'list_for_each_entry_continue' + - 'list_for_each_entry_continue_rcu' + - 'list_for_each_entry_continue_reverse' + - 'list_for_each_entry_from' + - 'list_for_each_entry_from_rcu' + - 'list_for_each_entry_from_reverse' + - 'list_for_each_entry_lockless' + - 'list_for_each_entry_rcu' + - 'list_for_each_entry_reverse' + - 'list_for_each_entry_safe' + - 'list_for_each_entry_safe_continue' + - 'list_for_each_entry_safe_from' + - 'list_for_each_entry_safe_reverse' + - 'list_for_each_entry_srcu' + - 'list_for_each_from' + - 'list_for_each_prev' + - 'list_for_each_prev_safe' + - 'list_for_each_rcu' + - 'list_for_each_reverse' + - 'list_for_each_safe' + - 'llist_for_each' + - 'llist_for_each_entry' + - 'llist_for_each_entry_safe' + - 'llist_for_each_safe' + - 'lwq_for_each_safe' + - 'map__for_each_symbol' + - 'map__for_each_symbol_by_name' + - 'maps__for_each_entry' + - 'maps__for_each_entry_safe' + - 'mas_for_each' + - 'mci_for_each_dimm' + - 'media_device_for_each_entity' + - 'media_device_for_each_intf' + - 'media_device_for_each_link' + - 'media_device_for_each_pad' + - 'media_entity_for_each_pad' + - 'media_pipeline_for_each_entity' + - 'media_pipeline_for_each_pad' + - 'mlx5_lag_for_each_peer_mdev' + - 'msi_domain_for_each_desc' + - 'msi_for_each_desc' + - 'mt_for_each' + - 'nanddev_io_for_each_page' + - 'netdev_for_each_lower_dev' + - 'netdev_for_each_lower_private' + - 'netdev_for_each_lower_private_rcu' + - 'netdev_for_each_mc_addr' + - 'netdev_for_each_synced_mc_addr' + - 'netdev_for_each_synced_uc_addr' + - 'netdev_for_each_uc_addr' + - 'netdev_for_each_upper_dev_rcu' + - 'netdev_hw_addr_list_for_each' + - 'nft_rule_for_each_expr' + - 'nla_for_each_attr' + - 'nla_for_each_nested' + - 'nlmsg_for_each_attr' + - 'nlmsg_for_each_msg' + - 'nr_neigh_for_each' + - 'nr_neigh_for_each_safe' + - 'nr_node_for_each' + - 'nr_node_for_each_safe' + - 'of_for_each_phandle' + - 'of_property_for_each_string' + - 'of_property_for_each_u32' + - 'pci_bus_for_each_resource' + - 'pci_dev_for_each_resource' + - 'pcl_for_each_chunk' + - 'pcl_for_each_segment' + - 'pcm_for_each_format' + - 'perf_config_items__for_each_entry' + - 'perf_config_sections__for_each_entry' + - 'perf_config_set__for_each_entry' + - 'perf_cpu_map__for_each_cpu' + - 'perf_cpu_map__for_each_idx' + - 'perf_evlist__for_each_entry' + - 'perf_evlist__for_each_entry_reverse' + - 'perf_evlist__for_each_entry_safe' + - 'perf_evlist__for_each_evsel' + - 'perf_evlist__for_each_mmap' + - 'perf_hpp_list__for_each_format' + - 'perf_hpp_list__for_each_format_safe' + - 'perf_hpp_list__for_each_sort_list' + - 'perf_hpp_list__for_each_sort_list_safe' + - 'perf_tool_event__for_each_event' + - 'plist_for_each' + - 'plist_for_each_continue' + - 'plist_for_each_entry' + - 'plist_for_each_entry_continue' + - 'plist_for_each_entry_safe' + - 'plist_for_each_safe' + - 'pnp_for_each_card' + - 'pnp_for_each_dev' + - 'protocol_for_each_card' + - 'protocol_for_each_dev' + - 'queue_for_each_hw_ctx' + - 'radix_tree_for_each_slot' + - 'radix_tree_for_each_tagged' + - 'rb_for_each' + - 'rbtree_postorder_for_each_entry_safe' + - 'rdma_for_each_block' + - 'rdma_for_each_port' + - 'rdma_umem_for_each_dma_block' + - 'resort_rb__for_each_entry' + - 'resource_list_for_each_entry' + - 'resource_list_for_each_entry_safe' + - 'rhl_for_each_entry_rcu' + - 'rhl_for_each_rcu' + - 'rht_for_each' + - 'rht_for_each_entry' + - 'rht_for_each_entry_from' + - 'rht_for_each_entry_rcu' + - 'rht_for_each_entry_rcu_from' + - 'rht_for_each_entry_safe' + - 'rht_for_each_from' + - 'rht_for_each_rcu' + - 'rht_for_each_rcu_from' + - 'rq_for_each_bvec' + - 'rq_for_each_segment' + - 'rq_list_for_each' + - 'rq_list_for_each_safe' + - 'sample_read_group__for_each' + - 'scsi_for_each_prot_sg' + - 'scsi_for_each_sg' + - 'sctp_for_each_hentry' + - 'sctp_skb_for_each' + - 'sec_for_each_insn' + - 'sec_for_each_insn_continue' + - 'sec_for_each_insn_from' + - 'sec_for_each_sym' + - 'shdma_for_each_chan' + - 'shost_for_each_device' + - 'sk_for_each' + - 'sk_for_each_bound' + - 'sk_for_each_bound_bhash2' + - 'sk_for_each_entry_offset_rcu' + - 'sk_for_each_from' + - 'sk_for_each_rcu' + - 'sk_for_each_safe' + - 'sk_nulls_for_each' + - 'sk_nulls_for_each_from' + - 'sk_nulls_for_each_rcu' + - 'snd_array_for_each' + - 'snd_pcm_group_for_each_entry' + - 'snd_soc_dapm_widget_for_each_path' + - 'snd_soc_dapm_widget_for_each_path_safe' + - 'snd_soc_dapm_widget_for_each_sink_path' + - 'snd_soc_dapm_widget_for_each_source_path' + - 'strlist__for_each_entry' + - 'strlist__for_each_entry_safe' + - 'sym_for_each_insn' + - 'sym_for_each_insn_continue_reverse' + - 'symbols__for_each_entry' + - 'tb_property_for_each' + - 'tcf_act_for_each_action' + - 'tcf_exts_for_each_action' + - 'ttm_resource_manager_for_each_res' + - 'twsk_for_each_bound_bhash2' + - 'udp_portaddr_for_each_entry' + - 'udp_portaddr_for_each_entry_rcu' + - 'usb_hub_for_each_child' + - 'v4l2_device_for_each_subdev' + - 'v4l2_m2m_for_each_dst_buf' + - 'v4l2_m2m_for_each_dst_buf_safe' + - 'v4l2_m2m_for_each_src_buf' + - 'v4l2_m2m_for_each_src_buf_safe' + - 'virtio_device_for_each_vq' + - 'while_for_each_ftrace_op' + - 'xa_for_each' + - 'xa_for_each_marked' + - 'xa_for_each_range' + - 'xa_for_each_start' + - 'xas_for_each' + - 'xas_for_each_conflict' + - 'xas_for_each_marked' + - 'xbc_array_for_each_value' + - 'xbc_for_each_key_value' + - 'xbc_node_for_each_array_value' + - 'xbc_node_for_each_child' + - 'xbc_node_for_each_key_value' + - 'xbc_node_for_each_subkey' + - 'zorro_for_each_dev' + +IncludeBlocks: Preserve +IncludeCategories: + - Regex: '.*' + Priority: 1 +IncludeIsMainRegex: '(Test)?$' +IndentCaseLabels: false +IndentGotoLabels: false +IndentPPDirectives: None +IndentWidth: 8 +IndentWrappedFunctionNames: false +JavaScriptQuotes: Leave +JavaScriptWrapImports: true +KeepEmptyLinesAtTheStartOfBlocks: false +MacroBlockBegin: '' +MacroBlockEnd: '' +MaxEmptyLinesToKeep: 1 +NamespaceIndentation: None +ObjCBinPackProtocolList: Auto +ObjCBlockIndentWidth: 8 +ObjCSpaceAfterProperty: true +ObjCSpaceBeforeProtocolList: true + +# Taken from git's rules +PenaltyBreakAssignment: 10 +PenaltyBreakBeforeFirstCallParameter: 30 +PenaltyBreakComment: 10 +PenaltyBreakFirstLessLess: 0 +PenaltyBreakString: 10 +PenaltyExcessCharacter: 100 +PenaltyReturnTypeOnItsOwnLine: 60 + +PointerAlignment: Right +ReflowComments: false +SortIncludes: false +SortUsingDeclarations: false +SpaceAfterCStyleCast: false +SpaceAfterTemplateKeyword: true +SpaceBeforeAssignmentOperators: true +SpaceBeforeCtorInitializerColon: true +SpaceBeforeInheritanceColon: true +SpaceBeforeParens: ControlStatementsExceptForEachMacros +SpaceBeforeRangeBasedForLoopColon: true +SpaceInEmptyParentheses: false +SpacesBeforeTrailingComments: 1 +SpacesInAngles: false +SpacesInContainerLiterals: false +SpacesInCStyleCastParentheses: false +SpacesInParentheses: false +SpacesInSquareBrackets: false +Standard: Cpp03 +TabWidth: 8 +UseTab: Always +... diff --git a/c1/a.out b/c1/a.out new file mode 100755 index 0000000000000000000000000000000000000000..c7235511b779b80337315fcb9f6fe1b6e65e6f3c GIT binary patch literal 53376 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 SS56IM8~+bW5duO$2>cHmx)SsN literal 0 HcmV?d00001 diff --git a/c1/compile_commands.json b/c1/compile_commands.json new file mode 100644 index 0000000..d059e99 --- /dev/null +++ b/c1/compile_commands.json @@ -0,0 +1,42 @@ +[ + { + "arguments": [ + "/nix/store/k8mrxviw965lv59hqbln3297jwfffm2w-clang-wrapper-16.0.6/bin/clang", + "-g", + "-c", + "main.c" + ], + "directory": "/Users/mthomson/dev/personal/modern-compiler-implementation-in-c/c1", + "file": "/Users/mthomson/dev/personal/modern-compiler-implementation-in-c/c1/main.c" + }, + { + "arguments": [ + "/nix/store/k8mrxviw965lv59hqbln3297jwfffm2w-clang-wrapper-16.0.6/bin/clang", + "-g", + "-c", + "prog1.c" + ], + "directory": "/Users/mthomson/dev/personal/modern-compiler-implementation-in-c/c1", + "file": "/Users/mthomson/dev/personal/modern-compiler-implementation-in-c/c1/prog1.c" + }, + { + "arguments": [ + "/nix/store/k8mrxviw965lv59hqbln3297jwfffm2w-clang-wrapper-16.0.6/bin/clang", + "-g", + "-c", + "slp.c" + ], + "directory": "/Users/mthomson/dev/personal/modern-compiler-implementation-in-c/c1", + "file": "/Users/mthomson/dev/personal/modern-compiler-implementation-in-c/c1/slp.c" + }, + { + "arguments": [ + "/nix/store/k8mrxviw965lv59hqbln3297jwfffm2w-clang-wrapper-16.0.6/bin/clang", + "-g", + "-c", + "util.c" + ], + "directory": "/Users/mthomson/dev/personal/modern-compiler-implementation-in-c/c1", + "file": "/Users/mthomson/dev/personal/modern-compiler-implementation-in-c/c1/util.c" + } +] diff --git a/c1/main b/c1/main new file mode 100755 index 0000000000000000000000000000000000000000..6ddca431b14a0de8c72fe5a321693eaf9f9f4601 GIT binary patch literal 16824 zcmeI4U5Fc16o7A%UD)DMS8R(~S3^;;;v|#ob~3?*#7jQAd7hrQ6DS?@gM1f4=z%Cv$)XKbM8#qB+It=eh!@6 zd+xdSoO8e2Jf2)!zjA$;u?Pc+f^G+m4>GpI;xJ?Ee$Z)9MLF>FGgB{3&CTL!ukgdY zOB*bVBf~~TIXE?cu-DDc=X%#zXhSIsH5R%R#WR{-Xu!}Pue~?COt=N@9vNVZ-F6U9 zaXr=X>b1?|4TXm=-avPN4e<<9DL87y2sZWC_jOpG9L7MqbGPoWo%t>P`)8hiZfbI- z!!8%z6GkrKcp>~Ua0sW|y^FC$kS_=!A6h= zAzmCtJfAC9)x6;-HPti03|Ul_`w*X+7ghwy!Nn*}SNh zGL~&NGs4YuLMoLI6C(1!fSbh2wu&4@TWmCnn!ZQV3yzjfJAT@f+?r6-bs;sD z7)yv4x)UvkhsE~QXWBLYaMP7#X-`WoTA93Fv{mtN!EEW0tjVUJ>t3~5b_LC{>z)OZ zyz2OtE%=UFs~L`v5>sMAN`f1!-ZYQfkS*UA$F=-esZ@EjpgF#7m70!hyJj{kNnLgG z7XjBus;Z-#(zpPL%0`$s8Qd+%GY$Fr?(;wMF!mV4z;`3&7#o6dcWC490A&;u{VO?m zGr{8ni-ZUe0U|&IhyW2F0z`la5CI}U1c(3;AOb{y2oM1xKm>>Y5g-CYfCvx)B0vO) z01+SpM1Tko0U|&IhyW2F0z`la5CI}U1c(3;AOb{y2oM1xKm>>Y5g-CYfCzL5EY7uK z$`9K@Gqy0tBF%>)Bf}5#73dqr-eLCBjXa1% zSW%&o_t6+@9}N$6CV1rTNYG)8ZLmAghQ&_*J?4bzV>> z!9)_)&vLzsJlaNMyC)-e4w7KKjyC~w<71ok}l^1lnnt;D0e6*yeF-H_`zBfOYV z^XeZSAYI+^^kHl^6{4|SBg8<|K7WNdE%p^XV1-7zgjD_2Y$SCsT7@^ zAG~qo(<2K@zpS2^KK|qfck-{Dnn{kl_{OQv-!$Id{@R(BU47rlzpm|E^G}@q?)~<$ rr>^cA{r7>l&b+exnegWqpFF#J>#=jonY4TQ`-yL-kH0r}J*@UW(@$4y literal 0 HcmV?d00001 diff --git a/c1/main.c b/c1/main.c new file mode 100644 index 0000000..215946d --- /dev/null +++ b/c1/main.c @@ -0,0 +1,39 @@ +#include +#include + +#include "prog1.h" + +int maxargs(A_stm statement) +{ + switch (statement->kind) { + case A_compoundStm: { + int a = maxargs(statement->u.compound.stm1); + int b = maxargs(statement->u.compound.stm2); + return a > b ? a : b; + break; + } + case A_assignStm: { + if (statement->u.assign.exp->kind == A_eseqExp) { + return maxargs(statement->u.assign.exp->u.eseq.stm); + } + } + case A_printStm: { + int sum = 1; + A_expList expList = statement->u.print.exps; + while (expList->kind == A_pairExpList) { + sum++; + expList = expList->u.pair.tail; + } + return sum; + } + } + + return 0; +} + +int main() +{ + A_stm program = prog(); + int result = maxargs(program); + printf("maxargs: %d\n", result); +} diff --git a/c1/main.o b/c1/main.o new file mode 100644 index 0000000000000000000000000000000000000000..2a6954a0a33ef2ad31e2efe4c157c12101a59047 GIT binary patch literal 5040 zcmb7IYiu0V6+Sb&Gam2S8$V+^gl3^mNCJMwAKK!^&L=zAj1N?p*O&Sd903V?J33RYN3|Q<4itHNbWEB?M z_Vd#|GeWZM{o4=hkE|>5oKlIWLmzJnYm&IkUda;RWj(**xMRv$jThlW&wp3d7hw?l zYO?KIeq?gYE|ju?+qSoTb!hLG=TrWww5`FL68W$S58(xn5ng6wq>`Uvy$kVHs_dN# zua_@tAzc^GaYsu`tHzs%g`Hnha>fenr||x2L-o3Nm5e)<_pZgeP1VyI_LTulk}A3` z9zIHtR$bqH3U9mWmHSk@Ou1ah+is@F@~#>057nTeDRm-MRoyk;Bg89>911>gb$zXg zuz#n5xpC2F!wc#wXR_6J8>;YzJ|mt#Q@-wa?^k#~Q1d1Ksd(8^5q0_Yq>p1IUaHjwU)@qK6Tg7nYz$tyI5*d3X)>^^7CsF*W|(sVzO>Bl#TZ&1 zfbWC3x$j&6-UGn+JM?FDIXwI3>=KNvMUaPjTbM6#X|!q;#@yV%<%fn&T-g2Q3zp3O zp%#25X8&>Sn7kF$h{1h}{BBGxK|Te3I`qx%Wnbhz%|6ArEC4v`=BlfoOu~dkYS_DI6Q8$WhG6&lq>*Rd zf=b%)KBQw^pf6bw2zdp&4Hqqj9qa)&N-OlG;OOIe3@SPYsc%K2t*DLBAjNj0iQkK+ zUW`{DOwD{9!m6ox3!+_5T1=e)>vd9FkLSeoy2J;tC2OYX$-0@kAD;RiW`Sd7ies(c0-dbaq_#oSY)6yUzYq-b z0R79NVJ=JTf-Q;tXtl)sj3x4DW8q*QqvJL!*{-Lr)O?dzC8o2io5eZ;{in>kMe5r1 zFIo>m5606e)=}sd^Ojo{w!F~4qCu>eVEhHF-^v%V(mDyfh4!keUdU?feqwlV8}a&P zz&y%~TJ?o$6HmgF#BsD*;`jK|{wzX*8Q@E@w0VIn92cmhWOM{yNk}7PlfE zf00>jKSrQkI$nlIokFvOvrqDm&W3l{qi61za-IQ~8SLl-zXR+V0-&wNlJD zZg*CCTxYt+^GlU{&)AW}+426V!!t*wv$^S+fg^{eoZ`Cmqodi%___y2XS%%H;Yz9G zclGsk_x9YK$?o2FfND4VQf2ns%hNt9a3O&VAE?;rGctLUs z`AU~l#7(o9cm0fy0=pc9da`|z9nVy7&l%dgcj%zKZ|B#x+xrjh*>2k+L$>D^Z8?m4 zl}x&xGv?-VX~*>uAZTgQ&F%AxureNlpY6u96DV3#=AEnG!&~L{gDvh<2GfoAMRDnXq^COE98P8{O;%A(KFoaJY z+(m*x zV%37DXTNmn(9!QbY~V=Q2AfNbr%JG3A-SAL!D@m03PC}?2NQ#rQ&RLy`bgE!oCAHH z9QG%-5Ddh}vi2B$cE@q0B_92hB*x=l{???;-%$MBL!G||F8?R#H@@vYfA{I1{PyDX z)bnSL-|@3b>TF$i<(-#%XCF`g@1^5QXLg>g%cj5m@YlU3|I7vd8}K{ee}Q@WwSjqx z-3i_U&Vr}FPk^~C<1ct`!8s+u6NfGyKe#xMxCsX?yjA7mkw_O0G3DY3M;A}wPDl_> zGP=0GDtK=0feTp5#bbglZb+&lJJ8jMMrAEiF79>8#XXf-+_O|i-VW%x_lgVJ)$|+; zWW=xbQKz58Z5DJ*yfx@_3?WU^{+p_&;FG{w_tm?co7ph7X6@|*+47MwZ^W6J$a>zy zOn?9F(`ycAMm@Ky;Ee2>@vta@eGWUF<7Nw!IsEEUTP9GwLb-dK*pt3f2sO{oIVGsU z)UFL$Bucx{nmBLh=CE;t`As7YSu<>`F^`$C(lFe64KZWWKQ~&3G9;#V*Hf7Dh?~ch+@a)VCHs`rlstuzGJg~L zLp4`~_-0y3h#=0hiFq~p>)IJ8eXvuI5pg-C0B}w@ZmqJH(~j0JbRO}%HAeG-P_!eu r5z1Aj;C8*h7CYJv3wAgEX#(4E#pbTZ7904e6#QbjKWO`cwpZl;0CBO5 literal 0 HcmV?d00001 diff --git a/c1/makefile b/c1/makefile new file mode 100644 index 0000000..9e61244 --- /dev/null +++ b/c1/makefile @@ -0,0 +1,17 @@ +a.out: main.o prog1.o slp.o util.o + cc -g main.o prog1.o slp.o util.o + +main.o: main.c slp.h util.h + cc -g -c main.c + +prog1.o: prog1.c slp.h util.h + cc -g -c prog1.c + +slp.o: slp.c slp.h util.h + cc -g -c slp.c + +util.o: util.c util.h + cc -g -c util.c + +clean: + rm -f a.out util.o prog1.o slp.o main.o diff --git a/c1/prog1.c b/c1/prog1.c new file mode 100644 index 0000000..989a925 --- /dev/null +++ b/c1/prog1.c @@ -0,0 +1,16 @@ +#include "util.h" +#include "slp.h" + +A_stm prog(void) { + +return + A_CompoundStm(A_AssignStm("a", + A_OpExp(A_NumExp(5), A_plus, A_NumExp(3))), + A_CompoundStm(A_AssignStm("b", + A_EseqExp(A_PrintStm(A_PairExpList(A_IdExp("a"), + A_LastExpList(A_OpExp(A_IdExp("a"), A_minus, + A_NumExp(1))))), + A_OpExp(A_NumExp(10), A_times, A_IdExp("a")))), + A_PrintStm(A_LastExpList(A_IdExp("b"))))); +} + diff --git a/c1/prog1.h b/c1/prog1.h new file mode 100644 index 0000000..f003689 --- /dev/null +++ b/c1/prog1.h @@ -0,0 +1,8 @@ +#ifndef PROG1_H +#define PROG1_H + +#include "slp.h" + +A_stm prog(); + +#endif // PROG1_H diff --git a/c1/prog1.o b/c1/prog1.o new file mode 100644 index 0000000000000000000000000000000000000000..3aebcbc36cc1a4e72f90a1b6482db6714bb59361 GIT binary patch literal 5216 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 = A_compoundStm; + s->u.compound.stm1 = stm1; + s->u.compound.stm2 = stm2; + return s; +} + +A_stm A_AssignStm(string id, A_exp exp) +{ + A_stm s = checked_malloc(sizeof(*s)); + s->kind = A_assignStm; + s->u.assign.id = id; + s->u.assign.exp = exp; + return s; +} + +A_stm A_PrintStm(A_expList exps) +{ + A_stm s = checked_malloc(sizeof(*s)); + s->kind = A_printStm; + s->u.print.exps = exps; + return s; +} + +A_exp A_IdExp(string id) +{ + A_exp e = checked_malloc(sizeof(*e)); + e->kind = A_idExp; + e->u.id = id; + return e; +} + +A_exp A_NumExp(int num) +{ + A_exp e = checked_malloc(sizeof(*e)); + e->kind = A_numExp; + e->u.num = num; + return e; +} + +A_exp A_OpExp(A_exp left, A_binop oper, A_exp right) +{ + A_exp e = checked_malloc(sizeof(*e)); + e->kind = A_opExp; + e->u.op.left = left; + e->u.op.oper = oper; + e->u.op.right = right; + return e; +} + +A_exp A_EseqExp(A_stm stm, A_exp exp) +{ + A_exp e = checked_malloc(sizeof(*e)); + e->kind = A_eseqExp; + e->u.eseq.stm = stm; + e->u.eseq.exp = exp; + return e; +} + +A_expList A_PairExpList(A_exp head, A_expList tail) +{ + A_expList e = checked_malloc(sizeof(*e)); + e->kind = A_pairExpList; + e->u.pair.head = head; + e->u.pair.tail = tail; + return e; +} + +A_expList A_LastExpList(A_exp last) +{ + A_expList e = checked_malloc(sizeof *e); + e->kind = A_lastExpList; + e->u.last = last; + return e; +} diff --git a/c1/slp.h b/c1/slp.h new file mode 100644 index 0000000..cfbd2c7 --- /dev/null +++ b/c1/slp.h @@ -0,0 +1,65 @@ +#ifndef SLP_H +#define SLP_H + +#include "util.h" + +typedef struct A_stm_ *A_stm; +typedef struct A_exp_ *A_exp; +typedef struct A_expList_ *A_expList; +typedef enum { A_plus, A_minus, A_times, A_div } A_binop; + +struct A_stm_ { + enum { A_compoundStm, A_assignStm, A_printStm } kind; + union { + struct { + A_stm stm1, stm2; + } compound; + struct { + string id; + A_exp exp; + } assign; + struct { + A_expList exps; + } print; + } u; +}; +A_stm A_CompoundStm(A_stm stm1, A_stm stm2); +A_stm A_AssignStm(string id, A_exp exp); +A_stm A_PrintStm(A_expList exps); + +struct A_exp_ { + enum { A_idExp, A_numExp, A_opExp, A_eseqExp } kind; + union { + string id; + int num; + struct { + A_exp left; + A_binop oper; + A_exp right; + } op; + struct { + A_stm stm; + A_exp exp; + } eseq; + } u; +}; +A_exp A_IdExp(string id); +A_exp A_NumExp(int num); +A_exp A_OpExp(A_exp left, A_binop oper, A_exp right); +A_exp A_EseqExp(A_stm stm, A_exp exp); + +struct A_expList_ { + enum { A_pairExpList, A_lastExpList } kind; + union { + struct { + A_exp head; + A_expList tail; + } pair; + A_exp last; + } u; +}; + +A_expList A_PairExpList(A_exp head, A_expList tail); +A_expList A_LastExpList(A_exp last); + +#endif // SLP_H diff --git a/c1/slp.o b/c1/slp.o new file mode 100644 index 0000000000000000000000000000000000000000..f63cf02693a460f046c55fcae3ccce6a3285cf19 GIT binary patch literal 7288 zcmbVReT$1CWEBnRn z-T{7b6`RGaa`4g2G3*|!h6NwB{y#_XT})sM7-Uc49Yt$QGYQL6B)!8FI(7Bq)R>C z_K@3gzr^{+RLW%%g=9Wcfm1!+ zEit#}Oj(Z?rq&?2tS?@1^YwZ`>hXTk=60GRFz?8|sX_I{)A5y(sd~J_b$A^eHApV& zi&x!M@}2K1f_Jmbcj!{X)Kd&yKZH`n3nu2WGra?Grp3U#TnwA`RB6MOMCBj4!7}FpLN}}dKqvZgK~uV02`AzsNrJRm0qumVK<4&KWzrfT$)&M!>;hK%z}GinqHlr z%R0lJ?UgcYZ3OEkZSiiwFkU_rHm006+^}J9_f%=a?h}>&gbmh+*Kw_34FI;dVQaA_ zZ}F;N7%!jDjp;#exM9OS?Wxj+eMVINp&P9IUdOeDH2?_Ru(eo|Lq8}O#>*#kV|vjW zZrHFVJypuE=Jo0y`U&Y^ynKeU+N^VWaAZD~QbrVcgOZbx0n z=2i%JIrJciDGkdzZ|HI@=XDLXU)F^%@bYj}V7jZNYovdI7+q=YZs$X+bx;L5Z^3gV z)`O6VPK;$;g3{*bfuXsW6X-$pMa;U)vD}f z#NhHFWw%0jfQG4bY_mHce?WPPvd;w{L$&aLu%Dxu*T_#LpV&sSD2S>`yTK*Y4d9Ga()P*g}w=s6Kr}Lq`)3cvQSOV7)0f8 zw^+`%(FUA5(AuhL1`_uO)uHA%*udl9JFN@d`7^2gX8!%o5!jUT9KGE+UqgqBxz1m; zUxqqE`67n7$o@NIJ-5Zmew{pROR#)z8pBec@!_mXKUypQ4s3RivkOzpy&~dju-q=L z82J%Ij%GK|Ir;|JnP6C2tziqVkr*H6fyhT_+n9efrG;a#EJL;Ot?VArV?7B4x0@Z| zh6^`><&Lu>oIqqf8a-C4H`XxRSY)i0k}E2A7R;&Lp^=$)?oYde^N%ot8miNSGLHxY zWnK*P0cqvu5^5I12)~9#2RVyDM*3jcN^6`}odNSe08}6rM{><`zzwU1-g7n92C&?i z_FSeW@?C?~?O~ZWfrrKKhh+n*m0wJ(9*y+~SZ-tyKY+-+Z1-?ChkNno9JjM;job)P zN4?M+sT)=nZzOYFy32GKM_Qssx(A)P`|TwLmak=FoqK#Y! zQAfGjgE}!0N~Lni!q)g$rd-Ju3-P{1JqvplsYre#p;5-zMh4>S0__z)^8%)1HGyf zd#|ZrwBCGmq?oT13%%*gSZ@iMVj-F9%@@;|a$y1gkk95aRwxDS>%inwk66x%iDrdKjR26X;lhR=`1lmDXXDghiaEzst%$6~v z7;?!<)kw6ckxVkJs>y6l(FFg?Yf_XN$)vVr(usUB$KUM+5(70E8#WmmNDRt+zi#Hc zM&^5k%y%F$JRywLHDOd#My*^wu#$VPNvb|`!Bb}`_oqPe*v#q^6nt-*(n6U(_RaeB z&OaZ%;~#h2y8X%DUp99|`A=6rUjFcp{m;(5;alH7@#sa)k>+z|e-D0lqdttvGwLYn zOQ`=sJ&hX1AUydw)}0&-g{L#+(<1ZmqWmU;~S!tvW%&b-%BJ^jnQGp|1M@X=#? zmp$53e)%AC{#(@NQC~xSAGHMo%|h)%U4gn0^?KAeD*mY^G;=^vcGPqr6VM_=u_EEs!?f5Jp+6A1QRr1d&tQS*|5u@R37w0$sAofZLgc4~ z-Yaxm=ygJu3yli}(ftR6-Ub>4peeUd#*t-y=U)f86?XI8B}6vTdd6HDBseY!@Ofmj3{m+3PF- literal 0 HcmV?d00001 diff --git a/c1/util.c b/c1/util.c new file mode 100644 index 0000000..1f6c0d7 --- /dev/null +++ b/c1/util.c @@ -0,0 +1,9 @@ +#include +#include "util.h" + +void *checked_malloc(int len) +{ + void *p = malloc(len); + assert(p); + return p; +} diff --git a/c1/util.h b/c1/util.h new file mode 100644 index 0000000..c1476b5 --- /dev/null +++ b/c1/util.h @@ -0,0 +1,16 @@ +#ifndef UTIL_H +#define UTIL_H + +#include + +typedef char *string; +string String(char *); + +typedef char bool; +#define TRUE 1; +#define FALSE 0; + +void *checked_malloc(int); + +#endif // !UTIL_H + diff --git a/c1/util.o b/c1/util.o new file mode 100644 index 0000000000000000000000000000000000000000..7c5b407ac025063f9a86acd27f0b8340a82c7a51 GIT binary patch literal 3512 zcmb_eU2GIp6uvY2OSj!^y9(U^vBU~IxVvpB6r}t#7ShTZnic|x@pg80x;u1tcG;P2 zy9I3{B=Fz^#Gm*eF~*p{8xNwGn22vam{5H%KJb7f#wR5)zMuj9&deR!9ZST7lbm~g z?z!LGpL6b=n}7cLpqVj=fv5?9-}j^G1cMUbFxiiwTFB|RE@E7p+{D1PiE~SvwS)n| z`JsJB4=vfQHY^mvlc9G5AWS|#TOi>Q=c;K{bt5kvUOX44!yP~iTSkPvoH);E*;<|# z%c||>eCWvF*#3th6GD4c$PN!4+zpT}o|4U0wP{*!Bi@$+=bn((W8&$?WSNF|@vhk? z$XG_mQqTdeVE@DstvEkyq8;ePlYGwjX9eCD0>ts!tp`u3REioml#*tm+l$vF@?$~( z+_Dc<7>-yGube$$ABY$4tibCM5Cf|ku*g^u&z@gJQN4JVJ$Mt3iD%U-E3Wrjfp+FBxspS&pW$~IZqZ>KSGegT)bXDX>r*IaU7^5S)>=y68)+_Q^H#8dJUGJj6`$U}Y zdEgOUeFR=F`lyzi@CYsjl^Gw?2O3RMV};%#Bud)fUh4r z7}y8}d)LK$(cO^XKU0f}k?)+=s-|8xI(xRIx>MWS^i3Q3Y}&NSRV|&LnNkbA z(^K`CSv5CX@0&R>t(W?@Pfn`ULjT-kJ!$5qs^zkk?CD8$r(agogX2d@O~KDRX8N#+ z&!tONp-4;>rb$2mh!LnVrWH1#=+TNsg3s<;=quxo~?=M62_SuEohfOEyf z)GS`L45k|vD{2O6czAq}GS0qV=#Fsa95{OpG*2J?%KYNKb=O1lqxn-gRXlJodLfGz5=Eaxe2CBBOFS;E=UmNAh{?tSCa#Oeo)Cp z`6r?%X~{)-ETX9T$VFu)qUbZ^q9PS8Xo5s__+8tTA7O-_&7qYf>91%D2?8Oo&+9qF92+uc+pY?+Ct|W&`}1WgkT_toVtN-AIPeQFY)R?yy;A! zIrvgQ4jzac2=A0TaUy^n0^`k24nSgjhH3_KS05xsXSyA^i=IEkXEr->7u7}><9>GR z;EzIH67oDG#s{Z_+$rQn(GNj*!Eg3qcOJa zz6%*)yHCM>PyAl8@v6H2U6k&zW%yW&jR|2B?ZdKe#)>>e|JJ